class StopIt
{
private bool stop;
void Loop()
{
while (!stop)
{
// work
}
}
void Stop()
{
stop = true;
}
}
アトミック操作です基本的には、ループの方法は1つのスレッドで実行されていると停止が他から呼び出された場合の動作は正常に停止しますか?私はboolの読み書きが原子的であることを理解しています。しかし、これで十分ですか?スレッドループがすぐに停止しない場合は、問題があります。私はストップ揮発性をマークする必要がありますか?が十分
私のルール:あなたは何が揮発性を意味するのか正確にわからないなら、あなたはロックフリーのプログラムを書くべきではありません。あなたは質問をしているので、あなたはそれが何を意味するのか分からない。したがって、ロックフリープログラムを作成しようとしないでください。安全です。ロックを使用してください。ロックは競合すると高価です。 (1)パフォーマンスの問題がある、(2)ロックが問題の原因である、(3)プロセッサのハードウェアレベルまでの揮発性の意味を理解していることが確認できるまで、ロックフリーにしないでください。 –
停止にアクセスしたときにロックを使用しないでください。もしそうなら、私はどのようにwhileループで読み取りアクセスをロックするのですか? –
@yummy:whileループでフィールドに直接アクセスするので、読み込みをロックするのは難しいです。その読み込みをプロパティ(またはメソッド)にカプセル化する場合は、値を読み込むためにロックを使用できます。 –