web-dev-qa-db-ja.com

ミューテックス、セマフォ、スピンロックの違い

IPC、特にミューテックス、セマフォ、スピンロックで実験を行っています。私が学んだのは、Mutexが非同期ロック(スリープ(NETで読んだ理論による))メカニズムに使用され、セマフォが同期ロック(シグナリングとスリープ)メカニズムであり、スピンロックが同期ロック(非スリープメカニズム)であるということです。

誰も私がこれらのものを深く明らかにするのを手伝ってくれますか?また、スレッドとミューテックスを使用してプログラムを作成したときに、1つのスレッドがスリープ状態ではなく、ロックの取得を継続的に試みるMutexについても疑問があります。だからミューテックスは眠っているか、眠っていない???

21
Novice

まず、これらの目標を思い出してください 'synchronizing objects'

これらのオブジェクトは、efficientおよびcoherent 'shared data' between 複数のスレッド 1つのプロセス間または異なるプロセスから。

これらのオブジェクトは、 'acquired'または 'released'

それだけです!!!ストーリーの終わり!!!

さて、それがあなたに役立つなら、私の砂粒を入れさせてください:

1)クリティカルセクション=ただ実行を許可するために使用されるユーザーオブジェクト1つのアクティブスレッド from他の多くの1つのプロセス内他の選択されていないスレッド(@このオブジェクトの取得)はsleepに置かれます。

[プロセス間機能なし、非常に原始的なオブジェクト]。

2)ミューテックスセマフォ(別名ミューテックス)=ちょうど実行を許可するために使用されるカーネルオブジェクト1つのアクティブスレッド他の多くのユーザーから1つのプロセス内でまたは異なるプロセス。他の選択されていないスレッド(@このオブジェクトの取得)はsleepに置かれます。このオブジェクトは、スレッド所有権、スレッド終了通知、再帰(同じスレッドからの複数の「取得」呼び出し)、および「優先度反転回避」をサポートします。

[プロセス間機能、非常に安全に使用できる、一種の「高レベル」同期オブジェクト]。

)カウントセマフォ(別名セマフォ)=実行を許可するために使用されるカーネルオブジェクトアクティブスレッドのグループ他の多くから、1つのプロセス内でまたは異なるプロセス間他の選択されていないスレッド(@このオブジェクトの取得)はsleepに置かれます。

[ただし、次の「mutex」属性がないため、使用するプロセス間機能はあまり安全ではありません:スレッド終了通知、再帰?、「優先順位反転回避」など)。

4)そして今、「スピンロック」について話し、最初のいくつかの定義:

Critical Region = 2つ以上のプロセスで共有されるメモリの領域。

Lock =値が「クリティカルリージョン」への入り口を許可または拒否する変数。 (単純な「ブール型フラグ」として実装できます)。

ビジー待機=何らかの値が表示されるまで変数を継続的にテストします。

最後に:

スピンロック(別名スピンロック)= A lockビジー待機lockの取得はxchgまたは同様の原子操作).

[スリープ状態のスレッドはありません。主にカーネルレベルでのみ使用されます。ユーザーレベルのコードにとっては非効率です。]。

最後のコメントとして、私は確信していませんが、上記の最初の3つの同期オブジェクト(#1、#2、#3)が実装の一部としてこの単純な獣(#4)を使用していることは大金です。

良い一日を過ごしてください!。

参照:

-Qing LiとCaroline Yaoによる組み込みシステムのリアルタイムコンセプト(CMP Books)。

-Andrew Tanenbaum(Pearson Education International)による最新のオペレーティングシステム(3回目)。

-Microsoft Windows用のプログラミングアプリケーション(4番目)、Jeffrey Richter(Microsoftプログラミングシリーズ)。

50
fante

セマフォとミューテックスの違いについては、次のとおりです。

http://blog.feabhas.com/2009/09/mutex-vs-semaphores- -part-1-semaphores /

短い答えは、少なくともバイナリセマフォの所有権に関するものですが、記事全体を読むことをお勧めします。

2
smyrgl