過去 2 週間ほどスレッドを扱ってきましたが、スレッドについて質問したいと思います。
ミューテックスについては知っていますが、単一のミューテックスを扱ったことはありません。なんで?ここのような非常に単純なブールスイッチを使用しているため(C++、スレッドの例):
bool fakeMutex = false;
...
while (fakeMutex);
fakeMutex = true;
// do smth
fakeMutex = false;
私はこれについて考えてきましたが、それが失敗する可能性は非常に小さい(まだ可能性のある可能性があると信じています)と信じ始めました。
アセンブリでは、これらは理論的には次のようになります。
Compare:
CMP 0,[offset fakeMutex]
JG Compare
MOV [offset fakeMutex],1
; do smth
MOV [offset fakeMutex],0
このミューテックスが失敗する唯一の方法は、fakeMutex が false のときに CMP 0,[offset fakeMutex] が実行され、その直後に別のスレッドが引き継ぎ、MOV [offset fakeMutex],1 の後に進み、OLD スレッドがアセンブリを実行しているジョブに戻る場合です。そのはずではありません。
それは非常に可能性が高いですか?
boost::thread で定義されている通常のミューテックス ロックの利点は何ですか? アセンブリを分割できないことをどのように保証しますか? 上記の例のように、ブール値の「ミューテックス」と同じくらい速く動作しますか?