これを適切に同期する方法は?現時点では、完了SetData
後に呼び出される可能性があるため、すでに別の値に設定されている可能性があります。ロックを挿入しようとしましたが、デッドロックになりました。e.WaitOne()
d
AutoResetEvent e = new AutoResetEvent(false);
public SetData(MyData d)
{
this.d=d;
e.Set(); // notify that new data is available
}
// This runs in separate thread and waits for d to be set to a new value
void Runner()
{
while (true)
{
e.WaitOne(); // waits for new data to process
DoLongOperationWith_d(d);
}
}
最善の解決策は、truedataAlreadyBeenSetAndWaitingToBeProcessed
に設定された新しいブール変数を導入SetData
し、最後にDoLongOperationWith_d
true に設定できるようにするSetData
ことでしょうか。この変数を true に設定して が呼び出された場合、単に戻ることができますか?