コード例:
MyObject myObject = new MyObject ();
public void FunA () // accessed from thread 1 (when user click a button)
{
myObject = null;
// do some stuff
myObject = new MyObject ( someNewValues );
}
public void FunB () // accessed from thread 2 (calling using timer or smth.)
{
int x = myObject.ReadX ();
}
ほとんどの場合、問題なく動作しますが、FunA が myObject を null にし、同時に FunB がそれにアクセスすると、アプリケーションがクラッシュします。
質問: スレッド 1 が FunA にアクセスする場合、スレッド 2 は FunB に入ることができません。
更新:以前にロックを試みましたが、問題は FunB がスレッド 1 (GUI) (guiForm.Invoke) に対してイベントを呼び出しており、スレッド 1 が FunA { lock... } の前にスタックすることです。