私がアトミックを言ったとき、私は命令のセットが同じプロセスの別のスレッドにのコンテキスト切り替えなしで実行されることを意味しました(もちろん、他の種類のスイッチも行われなければなりません)。私が思いついた唯一の解決策は、現在実行されている部分を除くすべてのスレッドを一時停止し、その後に再開することです。それ以上のエレガントな方法?コードをアトミック(C#)にすることは可能ですか?
私がしたいのは、複数のスレッドで実行されているオブジェクトの一貫した状態を収集するためです。しかし、それらのコードは変更できません(すでにコンパイルされています)ので、mutex、セマフォなどを挿入することはできません。原子操作は、もちろん、状態収集(すなわち、いくつかの変数のコピー)である。
達成しようとしていることは何ですか?他のすべてのスレッドを中断することは危険な方法です。あなたが目を覚ましたスレッドが何かをしようとするとデッドロックが発生し、中断されたスレッドの1つが何らかの種類のロックを解除してしまうことがあります。 –
私はこの文脈で原子という言葉を聞いたことがありません。私はそれをACIDの一部として、トランザクションの定義としてしか知りません。ところで、なぜこれが必要ですか? –
個々のIL演算はアトミックです。アトミック操作をサポートするクラスは非常に少なく(インターロックされています)。それ以外は、そして私はその点を見ません。 – Amy