クリティカル セクションで保護されたコードを含む共有オブジェクトがあり、複数のスレッドが読み取り/書き込みのためにオブジェクトにアクセスしているとします。スレッドがクリティカル セクション内にある場合、他のスレッドは待機しています。スレッドが CS から出ると、OS は待機中のスレッドのいずれかにアクセスを許可します。
1 つのプロセスのみに制限されている場合、CS だけで共有オブジェクトを適切に保護できますか?
CS を保護するためにカーネル オブジェクト (例: ミューテックス、セマフォン) を使用するのが正しい方法であると Web で見たので、質問します。共有リソースを使用したいスレッドは、最初に WaitForSingleObject 型の関数でミューテックス/セマフォを取得する必要があります。ミューテックスが使用されている場合、そのうちの 1 つだけがリソースにアクセスできます。ミューテックスが取得されると、スレッドは CS に入り、本来の処理を実行し、CS を離れてミューテックスを解放します。次に、OS は他の待機中のスレッドがミューテックスを取得できるようにします。
でもそれってCSだけ使ってるのと同じじゃない?
また、ミューテックスを使用すると、CS を単独で使用するよりも大幅に遅くなるはずです。CS のみを使用する場合の唯一の問題は、スレッドが CS 内でクラッシュすると、他のスレッドが共有リソースにアクセスできなくなる可能性があることです。
このアプローチが優れている他の理由はありますか? 前もって感謝します