我目前編寫C#WPF應用程序。我需要從三個線程讀取/寫入變量的同步訪問。該變量被聲明爲應用程序主窗口類的成員。因此,我宣佈它通過以下方式:我可以使用屬性中的C#鎖定運算符來同步對讀/寫變量的訪問嗎?
public partial class MainWindow : Window
{
. . . . .
#region Fields
/// <summary>
/// The variable myVar to synchronous access for read/write.
/// </summary>
private static Double myVar;
#endregion
. . . . .
}
我可以提供以下列方式將其同步接入:
1)定義同步對象作爲主窗口類的成員
public partial class MainWindow : Window
{
. . . . .
#region Fields
/// <summary>
/// This object is controlling the synchronous access for read/write to myVar.
/// </summary>
private static Object syncObj;
#endregion
. . . . .
}
2)在主窗口類中定義的下一個屬性
public partial class MainWindow : Window
{
. . . . .
#region Properties
/// <summary>
/// This property supports synchronous access to myVar for read/write.
/// </summary>
public static Double MyVar
{
lock(syncObj)
{
get{ return myVar; }
set{ if(myVar != value) myVar = value; }
}
}
#endregion
. . . . .
}
威爾這個屬性以正確的方式工作?它是否可以確保同步訪問的方法可讀取/寫入myVar變量?我不想使用volatile或方法作爲Thread.VolatileRead和Thread.VolatileWrite,因爲很多人說鎖操作符工作得更好,並允許編譯器優化代碼。
搜索「C#的存儲柵欄」(或「屏障」)的一些有趣的讀取(和導致http://stackoverflow.com/questions/6581848/memory-barrier-generators和類似) – 2012-09-28 06:13:34