Windows OS同期オブジェクトを使用しない独自のロックを実装する理由がよくあることがあります。しかしそうすることは「鋭いスティック」です。
例:ハードウェアコンテキストと同じ数のスレッドを実行していることがわかっている場合、待機しているスレッドの1つをスリープ状態にするまでの待ち時間ロックが非常に重要な場合は、ユーザー空間に完全に実装されたスピンロックを選択することができます。待機中のスレッドがロックを回している唯一のスレッドであれば、それを所有するスレッドから待機中のスレッド同じ状況下でOSロックを持つスレッドに通知するレイテンシよりも速いオーダーのスレッドに、キャッシュラインをオーナースレッドに移動して待機スレッドに戻すレイテンシです。
しかし、これをやりたいのはかなり狭いですハードウェアスレッドよりも多くのソフトウェアスレッドを持つようになると、後悔する可能性があります。このシナリオでは、スピンロックを回すだけで、OS全体をスケジューリングすることができます。また、電力を気にすると、スピンロックはプロセッサが低電力状態にならないために悪いことです。
私は移植性の議論を買うか分からない。ポータブルライブラリには、同期のためにさまざまなOS APIを抽象化するOS移植性レイヤーがあることがよくあります。ロックを扱っている場合、pthread_mutexは、抽象化レイヤの下のWindowsミューテックスまたはクリティカルセクションと意味的に同じにすることができます。ここにはいくつかの例外がありますが、ほとんどの人にとってこれは真です。 WindowsイベントやPOSIX条件変数を扱っているのであれば、それらは抽象的に扱いにくいものです。 (VistaはPOSIXスタイルの条件変数を導入しましたが、多くのWindowsソフトウェア開発者はVistaを必要とする立場にありません...)
boost \ thread \ win32 \ basic_timed_mutex.hppを見てください私はwin32スレッドオブジェクトの使用を見ません。とにかくアトミックな特殊なCPU命令を使用するインターロックされたメソッドで実行されているようです。 –
インターロックされたメソッドは、いくつかのWin32同期オブジェクトの基礎でもあります。これはmutexesやselectのために本当に必要なものです。 – Blindy
インターロックされたメソッドはWin32 APIの一部です。それらは上位レベルのWin32同期オブジェクトより移植性がありません。 – jalf