C ++ 11マルチスレッド - セマフォ

オペレーティングシステムは、多くの場合、カウントとバイナリセマフォを区別します。カウンティングセマフォの値は、無制限のドメインを超える範囲にすることができます。バイナリセマフォの値は、0と1の間の範囲であることができるこのように、バイナリセマフォは、ミューテックスのロックと同様に振る舞います。実際には、ミューテックスのロックを提供していないシステムでは、バイナリセマフォは相互排他を提供するために代わりに使用することができます。

計数セマフォは、インスタンスの有限数からなる特定のリソースへのアクセスを制御するために使用することができます。セマフォは、利用可能なリソースの数に初期化されます。リソースを使用したい各プロセスは、(それによって、カウントをデクリメント)セマフォを待機()動作を行います。プロセスがリソースを解放したとき、それは、信号()動作(カウントをインクリメント)を行います。セマフォのカウントが0になると、すべてのリソースが使用されています。カウントが0より大きくなるまでその後、リソースを使用するプロセスがブロックされます。

 

セマフォは、本質的にカウンター+ミューテックス+待ちキューです。 それは外部依存することなくそのまま、それは使用することができます。 あなたはミューテックスとして、または条件変数のいずれかとして、それを使用することができます。

後者は、より軽量で柔軟であるため、セマフォは、条件変数よりもより洗練された構造として扱うことができます。

 

私たちは、簡単にミューテックスと条件変数からセマフォを構築することができます。

 

 

参照

https://stackoverflow.com/questions/4792449/c0x-has-no-semaphores-how-to-synchronize-threads

おすすめ

転載: www.cnblogs.com/hankunyan/p/11669416.html