私はメソッドを持っています。これは、例えば、Dispose
のように1回だけ呼び出さなければなりません。1回限りのメソッドのスレッドセーフな実装
private bool _isAlive = true;
public void Dispose()
{
if (this._isAlive)
{
this._isAlive = false;
//Do Something
}
}
しかしcomprasionと偽にフラグ_isAlive
設定の間に隙間があるので、それはスレッドセーフではありません。今、私は次のようにそれを実現しています。したがって、複数のスレッドが//Do Something
コードを実行する可能性があります。
スレッドセーフなバリアントはありますか?
可能重複[スレッドセーフなコードを置き換える?](http://stackoverflow.com/questions/9061311/thread-safe-replace-for-code)...特にあなたがきたことを考えると
両方の質問について本質的に全く同じ答えを得た。 –@AndrewBarber正確には...あなたがリンクしている質問は似ていますが、リエントラント(つまり、複数の実行を並行して)からの保護しか扱っていません...この質問は、オブジェクトの全ライフタイム。 – Yahia
ちなみに、あなたはあなたの要求を完全に間違って記述しています。 'Dispose()'は何度も呼び出されなければならないということではなく、ほぼ逆のことです: 'Dispose()' *は、複数回呼び出されることを安全に処理できなければなりません。 –