我想C#創建線程安全的特性,我想確保我是正確的道路上 - 這裏是我做了什麼 -線程安全屬性
private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice
{
get
{
lock (AvgBuyPriceLocker)
{
return _AvgBuyPrice;
}
}
set
{
lock (AvgBuyPriceLocker)
{
_AvgBuyPrice = value;
}
}
}
閱讀此公告,它似乎好象這是沒有這樣做的正確的方式 -
然而,這篇文章似乎並非如此,
http://www.codeproject.com/KB/cs/Synchronized.aspx
有沒有人有更明確的答案?
編輯:
,我想要做的getter/setter此屬性的原因爲B/C其實我希望它火的時候,它設置一個事件 - 這樣的代碼實際上是這樣的 -
public class PLTracker
{
public PLEvents Events;
private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice
{
get
{
lock (AvgBuyPriceLocker)
{
return _AvgBuyPrice;
}
}
set
{
lock (AvgBuyPriceLocker)
{
Events.AvgBuyPriceUpdate(value);
_AvgBuyPrice = value;
}
}
}
}
public class PLEvents
{
public delegate void PLUpdateHandler(double Update);
public event PLUpdateHandler AvgBuyPriceUpdateListener;
public void AvgBuyPriceUpdate(double AvgBuyPrice)
{
lock (this)
{
try
{
if (AvgBuyPriceUpdateListener!= null)
{
AvgBuyPriceUpdateListener(AvgBuyPrice);
}
else
{
throw new Exception("AvgBuyPriceUpdateListener is null");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
我非常新的做我的代碼線程安全的,所以請隨時告訴我,如果我在完全錯誤的方式去一下吧!
請問
沒關係。我不明白,爲什麼你認爲它不是。鏈接的答案並不表示這樣做是一個壞主意。 –
var property = new ConcurrentValue(); property.ReadValue(x => { //使用此線程安全值x }); property.WriteValue(()=> //複雜耗時的阻塞計算 return「Computed」; }); } 您可以創建一個ConcurrentValue類,用作具有鎖定功能的屬性值持有者,以獨佔方式編寫並執行多次讀取 - Object.Property.Write((=)=>耗時計算)//阻止Object.Property.Read (x =>) –