問題タブ [binary-semaphore]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
operating-system - バイナリセマフォとミューテックスの違い
バイナリセマフォとミューテックスに違いはありますか、それとも本質的に同じですか?
multithreading - セマフォの基本操作
まず、これが私の質問の正しい場所でない場合は、ご容赦ください。
私は試験のために勉強しています。これは与えられたサンプルの質問です:
以前の試験で出題された問題:
生徒たちは会って映画を見に行くことにしました。生徒たちは会って映画を見に行くことにしました。会って映画を見に行くことにしました。group_size のグループに集まった後、チケットを買いに行きます。各学生の学生は自分のチケットを購入します(顧客になります)。チケット売り場は2カ所(各ブースに1名ずつ)。店員が空いている場合は、オンラインで次の顧客にサービスを提供します (一度に 1 人の顧客)。どちらのブースも1列のみです。
セマフォとセマフォに対する操作を使用して、Student と Clerk の 2 つのスレッド タイプを同期します。numStundents (デフォルト 9) と numClerks (デフォルト 2) があります。早朝にブースに列を作っている顧客がいないことを考慮してください。店員の観点から (それはあなた次第です)、両方の店員がすでに出勤しているか、どちらもまだ到着していない (最初の顧客が現れたとき) と見なすことができます。numStudents よりも多くの顧客がいます。使用される各セマフォのタイプと初期値を示し、その使用法を簡単に説明してください。ブール変数の使用をセマフォで置き換えることができる場合は、ブール変数を使用しないでください。同期のほぼ前に、スレッドの可能な実行疑似コードは次のようになります。
誰かがこの質問を解決するのを手伝ってくれたら、本当に感謝しています。
c - C 言語で POSIX を使用してバイナリ セマフォを複数のプロセス (スレッドではなく、プロセスのみ) 間で共有する
C言語でPOSIXを使用して、複数のプロセス(スレッドではなく、プロセスのみ)間で共有されるバイナリセマフォを作成しています。ミューテックスを使用してバイナリ セマフォを作成すると、
スレッド間でのみ使用できますが、プロセス間で共有したいです。だから私の質問は、posixカウントセマフォを使用してバイナリセマフォを作成する方法ですか?
c - 親スレッドによるログのローテーション中に子スレッドがファイルにアクセスするのを防ぐミューテックスまたはセマフォ?
私のプログラムには、メイン スレッドと多数の子スレッドがあり、これらのスレッドは、特に同じログ ファイルに書き込みます。1 日に 1 回、メイン スレッドはログ ファイルが大きすぎるかどうかをチェックし、アーカイブして閉じ、圧縮します。子スレッドは、ログに書き込みたいときに、ファイルの fd が null でないかどうかをチェックします。有効な場合はログへの書き込みに進み、有効でない場合は新しいログ ファイルを開始します。問題は、並行性のために、子スレッドがブルームーンで fd を取得すると、すべてが正常に見えますが、その後中断され、メインスレッドがファイルをアーカイブし、子スレッドが実行を再開して書き込みを試みるまでにログ、fd が無効になり、segfault が発生します。では、これにアプローチする最良の方法は何ですか?メイン スレッドと log_write を実行する子スレッドの部分で同じミューテックスを使用することを考えました。これで解決するはずですが、複数の子スレッドが同時に log_write を実行するのを防ぎたくありません。確かに、ログは少し混乱しているかもしれませんが、今のところこれは問題ではありません。ログのアーカイブ処理が開始された後に、子スレッドがログへの書き込みを開始するのを防ぐメカニズムが必要なだけです。これはセマフォの場合のように思えますか?