問題タブ [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.
java - 単一のJavaセマフォでデッドロック?
私の最近の回答の 1 つで、メモリ リソースへのアクセスを制限する理論的なセマフォの例を示しました。
割り当てインターリーブが悪い場合、これがデッドロックの原因になる可能性があると思います。
私の観察は本当ですか?はいの場合、どうすればこの状況を回避できますか (時間指定待機やロールバックなど)?
java - セマフォはどのように機能しますか?
セマフォは 0 未満にできますか? つまり、N=3 のセマフォがあり、「ダウン」を 4 回呼び出すと、N は 0 のままですが、1 つのプロセスがブロックされますか?
逆に言えば、最初に電話をかけた場合、N は 3 より大きくなり得るでしょうか? 私が見ているように、N が 3 よりも大きくなる可能性がある場合、最初に数回呼び出すと、後でできるよりも多くの回数を呼び出すことができるため、クリティカル セクションにより多くのプロセスを配置でき、セマフォによって許可されます。 .
誰かが私のためにそれを少し明確にしてくれれば、私はとても感謝しています.
グレッグ
semaphore - 特定のセマフォを開いたり使用したりするプロセスを知る方法は?
281 のプロセスによって開かれたセマフォがあります。これらのプロセスのすべての pid を取得する方法はありますか?
ipcs -a|grep 67108878
s 67108878 0xcef73014 --ra-ra---- オラクル DBA オラクル DBA 281 17:54:58 9:27:30
multithreading - 名前付き System V セマフォを正しく破棄する
名前付き System V セマフォを使用して、OSX および Linux 上のすべてのアプリでファイルをロックしています。どの定義から見ても、最も美しい API ではありません。
動作しているように見えますが、全員がセマフォを使い終わった後、セマフォを適切に破棄する方法がわかりません。
一般的なロジックは次のようになります。
作成:
[1] スレッドまたはプロセスは、ftok() によってファイル用に作成された key_t で設定されたセマフォを開こうとします。セットには 2 つのセマフォが含まれています。[2] セマフォ セットが存在しない場合は、666 パーミッションで作成されます。[3] 「ロック」(セマフォの 1 つ) が解放状態 (値 1) に設定されます。[4] 「参照カウント」(同じセット内の別のセマフォ) がインクリメントされます。
ロック/ロック解除:
[5] をロックするには、スレッドは「ロック」セマフォの値を 1 減らします (元に戻す機能を使用)。したがって、値が既にゼロである場合は待機します。[6] のロックを解除するために、スレッドはそれを 1 つ増やし、他の誰かがロックできるようにします。
破壊:
[7] 「参照カウント」セマフォをデクリメントしようとしています (IPC_NOWAIT フラグを使用)。[8] その値が 0 であることを確認し、[9] セマフォ セットが破棄されます。
(1 つのスレッド内でロックを再帰的にするための、スレッド ローカル ストレージに基づくロジックのレイヤーもあります。)
質問は次のとおりです。
- 手順 [1] と [2] を同期するにはどうすればよいですか? (セマフォ セットが存在しない場合、星を数えている間に他の誰かによって作成されたため、作成も失敗します)
- ステップ [4] を [8] と同期させて、[9] で早死にさせないようにするにはどうすればよいですか?
- 他の競合条件はありますか?
PS: POSIX セマフォにはより優れた API がありますが、ここで説明されているように sem_inlink() の動作を乗り切ることはできないと思います。
セマフォを再作成または再接続するための sem_open() の呼び出しは、 sem_unlink() が呼び出された後に新しいセマフォを参照します。
だから私は彼らを解放する方法がありません...
multithreading - sem_init(...): pshared パラメータの目的は何ですか?
大学院のクラスでは、スレッドを操作するためにセマフォを使用する必要がありました。
sem_init
他の sem_* プロシージャと一緒に使用するように指示されましたが、これらの各 sem_* メソッドの詳細についてはあまり情報がありませんでした。
のプロトタイプ (およびヘッダー ファイル)sem_init
は次のとおりです。
しかし、pshared 値が何に使用されるのかわかりません。opengroup.orgによると:
pshared
引数がゼロ以外の値の場合、セマフォはプロセス間で共有されます。この場合、セマフォにアクセスできるすべてのプロセスは、、、、 および操作の実行 にsem
使用できます。sem
sem_wait()
sem_trywait()
sem_post()
sem_destroy()
しかし、私は1、2、10、25、50000などの違いを理解していないと思います。値が0の場合、セマフォは共有されていないと言っていると思います。(しかし、それでは、ポイントは何ですか?)
pshared
このパラメーターを適切に使用するにはどうすればよいですか?
linux - マルチプロセス同期 - セマフォよりも良い選択?
複数のプロデューサーと複数のコンシューマーで共有されるキュー リソースがあります。すべてが独立したプロセスです。キューを「所有」するプロセスはありません。
実装の性質上、キューへのアクセスを制御する必要があり、任意の時点でプッシュまたはポップできるプロセスは 1 つだけです。
セマフォという名前の POSIX を使用することが適切な解決策になると考えましたが、いくつかの詳細が気になります。(これは Linux のみの実装です。)
sem_unlink を実行する必要があるのはいつですか? 実際にキューを削除する理由はありますか?
キュー セマフォをロックしたままプロセスが停止することが心配です。これを回避する良い方法はありますか?ロックを取得しようとするときに一定時間待機することはできますが、タイムアウトになると競合状態になります。
このような単純なバイナリ ロックのより良い解決策はありますか? おそらく、fcntl および/または排他的オープンを使用したロックファイルでしょうか?
python - Django: 単純なレート制限
私のビューの多くは、外部リソースをフェッチします。重い負荷の下でリモートサイトを爆破しないようにしたい (および/または禁止されないようにしたい)。
私はクローラーを 1 つしか持っていないので、中央のロックで問題なく動作します。
詳細: 1 秒あたり最大 3 つのホストへのクエリを許可し、残りのブロックを最大 15 秒にしたいと考えています。どうすれば(簡単に)これを行うことができますか?
いくつかの考え:
- ジャンゴキャッシュを使用する
- 1秒の解像度しかないようです
- ファイルベースのセマフォを使用する
- 並行性のためのロックを簡単に行うことができます。1 秒間に 3 回のフェッチのみを行うようにする方法がわかりません。
- 一部の共有メモリ状態を使用する
- これ以上インストールしたくないのですが、必要に応じてインストールします。
c++ - UNIX/OSXバージョンのsemtimedop
GLibCには、一定時間後にタイムアウトする操作(この場合はセマフォ取得semtimedop
)を実行できるメソッドがあります。Win32は、同様の機能を提供するものも提供します。WaitForSingleObject
私が見る限り、OSXや他のUnicesには同等のものはありません。semtimedopと同等のもの、または一定時間後にsemopをクリーンに終了するための回避策のいずれかを提案できますか。
c++ - Qtの子スレッドで関数を呼び出しますか?
さまざまな時点で子スレッド関数を呼び出すメイン スレッドがありますが、それが Qt で正しい方法であるかどうかはわかりません。以下のコードの何が問題であり、より良い代替手段を探しています。
メインスレッドがロック子を解放するたびに、メインスレッドが無限に実行されます。
linux - 現在セマフォを保持しているプロセスを表示するにはどうすればよいですか?
ユーザースペースLinuxでは、straceで検出されたように、セマフォでプロセスがブロックされています。エラー状態が発生すると、ブロッキングは繰り返し可能になるため、セマフォを保持し、それを解放しなかった別のプロセスが必要です。
現在セマフォを保持している他のプロセスを知る方法はありますか?
ipcs
はセマフォをリストし、/ proc / sysvipc/semもリストします。保留プロセスに関する情報はどこにありますか?