これは本当に簡単な質問です。競合状態を防ぐためにセマフォを使用しようとしています。私はマニュアルページを読んでみましたが、本当に混乱しています。誰かが彼らの働き方を簡単に説明できますか?競合状態を防ぐためにセマフォを使用する(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. 競合状態を防ぐためにロックを使用する方法
- 2. jquery - この競合状態を防ぐ
- 3. jQueryのAJAXコールで競合状態を防ぐ
- 4. 選択と更新の競合状態を防ぐ方法
- 5. は私がoccuringから、このような競合状態を防ぐにはどうすればよい(Laravelを)データベーストランザクションを使用した競合状態を
- 6. C#スレッド競合状態
- 7. 競合状態をスレッド化し、スレッドをスリープ状態にするためにタイマを使用する
- 8. データ競合状態を防止するスレッドの使用を学習する
- 9. go言語の潜在的な競合状態
- 10. #defineをC言語でスイッチの状態で使用する
- 11. 競合状態
- 12. 競合状態
- 13. 競合状態
- 14. RSpec:競合状態のためにsidekiqワーカーをテストする
- 15. 競合ネットを使用して過剰適合を防ぐ
- 16. ブラウザの競合状態を防止するJavaScriptページのリフレッシュ
- 17. 不変オブジェクトが競合状態を防止する方法
- 18. マージ競合を防ぐためのgit pullオプション
- 19. EventSourcing競合状態
- 20. PHPはMySQLの競合状態を防ぎます
- 21. C#スレッド:競合状態の例
- 22. 競合状態を避けるために新しいファイルを作成する
- 23. ログメッセージの書き込み中にZend_Logが競合状態を防ぐ方法を教えてください。
- 24. アンドロイドdlopen()の競合状態?
- 25. 競合状態の回避
- 26. タイマー、ファイル、競合状態?
- 27. コンテキストサービスの競合状態
- 28. 避け競合状態
- 29. シグナル間の競合状態
- 30. ポート発見競合状態
次のスレッドに良いアナロジーがあります。 http://stackoverflow.com/questions/34519/what-is-a-semaphore –
並列プログラミングの経験がない場合でも、セマフォは使用しないでください。マニュアルページから分かるように、それらは中断可能であるため、アプリケーションコードでの使用は非常に困難です。代わりに、mutex、条件変数、または読み書きロックを使用してください。 –