これは本当に簡単な質問です。競合状態を防ぐためにセマフォを使用しようとしています。私はマニュアルページを読んでみましたが、本当に混乱しています。誰かが彼らの働き方を簡単に説明できますか?競合状態を防ぐためにセマフォを使用する(C言語)
答えて
Linux/Unixで使用していることを前提としています。 セマフォは、複数のスレッドから共有リソースへのアクセスを制御/制限するために使用されます(グローバル変数など)。 スレッドがセマフォを受け取り、値を変更して解放する 別のスレッドが変数にアクセスしようとすると、セマフォを取得する必要があり、すでに獲得されている場合は保留され、前のスレッドが制御を放棄した後にアクセスします。
このようにして、セマフォは、操作の順序付けと変数の整合性のために使用されます。
セマフォは、あるスレッドから別のスレッドへイベントを通知するためにも使用されます。 ミューテックスは
同じスレッドの取得セマフォの変種、であり、(クリティカルセクションやレース条件を守るために)それを解放
私は私のシステムでは、このトピックには現在午前http://beej.us/guide/bgipc/output/html/multipage/semaphores.html
これはLinux上にあります。ありがとう – David
サブブルは良い参考資料です。 _Advanced Unix Programming_のMarc Rochkindは、セマフォーはおそらくUnixで使用するのが最も難しいものの1つであると述べています。私がそれらを使用したとき、私はUnixセマフォの完全な複雑さを利用するのではなく、単一のDijkstraのようなセマフォーで立ち往生しました。 –
答えのリンクが死んでいます。同じページはhttps://www.saoにあります。ru/hq/sts/linux/doc/ipc_guide/semaphores.html – Garo
以下の詳細を読みます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)
- 1. jquery - この競合状態を防ぐ
- 2. jQueryのAJAXコールで競合状態を防ぐ
- 3. C#スレッド競合状態
- 4. データ競合状態を防止するスレッドの使用を学習する
- 5. 競合状態
- 6. ブラウザの競合状態を防止するJavaScriptページのリフレッシュ
- 7. 競合ネットを使用して過剰適合を防ぐ
- 8. マージ競合を防ぐためのgit pullオプション
- 9. C#スレッド:競合状態の例
- 10. 競合状態の回避
- 11. .NETガベージコレクタ「競合状態」
- 12. アンドロイドdlopen()の競合状態?
- 13. オーダーの競合状態
- 14. 競合状態を避けるために新しいファイルを作成する
- 15. JbossでHornetQを使用する場合の競合状態を避ける
- 16. CSSの競合を防ぐためにiframeでGoogle Maps APIを使用しますか?
- 17. 複数のAJAXリクエストのため競合状態
- 18. C#プログラムでこの競合状態を避ける
- 19. 状態結合の防止?
- 20. 複数のchrome.storage APIコールの競合状態を防ぐ最も良い方法は?
- 21. SQLインジェクションをC言語で防ぐ方法は?
- 22. Wi-Fiがオフ状態になるのを防ぐ方法
- 23. jQueryフェードイン/フェードアウト競合状態ですか?
- 24. BlockingCollection、競合状態ですか?
- 25. inotify(競合状態?)を使用しているC/C++(Linux)の複数のファイルをテーリングする
- 26. レールで競合状態のために(YでXの制限数)を解く
- 27. 競合状態を引き起こすC用のテストフレームワークはありますか?
- 28. プログラムで "競合するプロバイダ"メッセージを防ぐ方法
- 29. なぜCUDAの同期ポイントは競合状態を防ぎませんか?
- 30. javascript競合状態の問題
次のスレッドに良いアナロジーがあります。 http://stackoverflow.com/questions/34519/what-is-a-semaphore –
並列プログラミングの経験がない場合でも、セマフォは使用しないでください。マニュアルページから分かるように、それらは中断可能であるため、アプリケーションコードでの使用は非常に困難です。代わりに、mutex、条件変数、または読み書きロックを使用してください。 –