2012-04-20 15 views
2

これは本当に簡単な質問です。競合状態を防ぐためにセマフォを使用しようとしています。私はマニュアルページを読んでみましたが、本当に混乱しています。誰かが彼らの働き方を簡単に説明できますか?競合状態を防ぐためにセマフォを使用する(C言語)

+0

次のスレッドに良いアナロジーがあります。 http://stackoverflow.com/questions/34519/what-is-a-semaphore –

+0

並列プログラミングの経験がない場合でも、セマフォは使用しないでください。マニュアルページから分かるように、それらは中断可能であるため、アプリケーションコードでの使用は非常に困難です。代わりに、mutex、条件変数、または読み書きロックを使用してください。 –

答えて

1

Linux/Unixで使用していることを前提としています。 セマフォは、複数のスレッドから共有リソースへのアクセスを制御/制限するために使用されます(グローバル変数など)。 スレッドがセマフォを受け取り、値を変更して解放する 別のスレッドが変数にアクセスしようとすると、セマフォを取得する必要があり、すでに獲得されている場合は保留され、前のスレッドが制御を放棄した後にアクセスします。

このようにして、セマフォは、操作の順序付けと変数の整合性のために使用されます。

セマフォは、あるスレッドから別のスレッドへイベントを通知するためにも使用されます。 ミューテックスは

同じスレッドの取得セマフォの変種、であり、(クリティカルセクションやレース条件を守るために)それを解放

私は私のシステムでは、このトピックには現在午前

http://beej.us/guide/bgipc/output/html/multipage/semaphores.html

+0

これはLinux上にあります。ありがとう – David

+0

サブブルは良い参考資料です。 _Advanced Unix Programming_のMarc Rochkindは、セマフォーはおそらくUnixで使用するのが最も難しいものの1つであると述べています。私がそれらを使用したとき、私はUnixセマフォの完全な複雑さを利用するのではなく、単一のDijkstraのようなセマフォーで立ち往生しました。 –

+0

答えのリンクが死んでいます。同じページはhttps://www.saoにあります。ru/hq/sts/linux/doc/ipc_guide/semaphores.html – Garo

0

以下の詳細を読みますIIクラスであり、基本的にプログラミングのためにC言語を使用します。私のインストラクターが私たちに説明したように、セマフォーは基本的に特定のスレッド関数をチェックするのに役立つ非負整数の同期変数です。これは、pthread_mutex関数のように、コード内でスレッドを制御しようとする... ahem - ええ、私はそれがやや曖昧であることを知っていますが、すべてのセマフォはスレッドアクティビティを調整するために使用されます。 。私があなたをもっと混乱させないことを願っています(0_0)。

私が何を意味するかの例をいくつ:

- セマフォ:非負整数同期変数。

•sem_wait(s):[while(s == 0)wait(); s--; ] - 元々P()、 "Proberen"(テスト)のオランダ語

•sem_post(s ++; ]

- もともと名前V()、オランダ語は "Verhogen" (インクリメント)

ため - OS保証操作 括弧[]は不可分に実行されます。

CREDIT/CITATION:博士フィリップス、ジョセフ、デポール大学、講義(2014)

関連する問題