現在、C# WPF アプリケーションを作成しています。3 つのスレッドから変数への読み取り/書き込みのための同期アクセスが必要です。この変数は、アプリケーションのメイン ウィンドウ クラスのメンバーとして宣言されます。そこで、次のように宣言しました。
public partial class MainWindow : Window
{
. . . . .
#region Fields
/// <summary>
/// The variable myVar to synchronous access for read/write.
/// </summary>
private static Double myVar;
#endregion
. . . . .
}
次の方法で同期アクセスを提供できますか。
1) 同期オブジェクトを MainWindow クラスのメンバーとして定義する
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) MainWindow クラスで次のプロパティを定義します。
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 として使用したくありません。多くの人がロック演算子の方がうまく機能し、コンパイラがコードを最適化できると言っているからです。