問題タブ [mutual-exclusion]
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.
python - プログラムのインスタンスが 1 つだけ実行されていることを確認する
プログラムのインスタンスを 1 つだけ実行する Pythonic の方法はありますか?
私が思いついた唯一の合理的な解決策は、あるポートでサーバーとして実行しようとすることです。次に、同じポートにバインドしようとする2番目のプログラムが失敗します。しかし、それは本当に素晴らしいアイデアではありません。これよりも軽量なものがあるのではないでしょうか?
(プログラムが時々失敗することが予想されることを考慮してください。つまり、segfault-「ファイルのロック」などは機能しません)
perl - Perl プログラムのインスタンスが 1 つだけ実行されていることを確認する最善の方法は何ですか?
これを行うにはいくつかの方法がありますが、どれが最適かはわかりません。
これが私が考えることができるものです:
- pgrep を使用してプロセスを探します。
- flock を使用してスクリプト自体をロックし、実行するたびにロックされているかどうかを確認します。
- /var/run/program_name.pid に pid ファイルを作成して存在を確認し、必要に応じて pid を比較します。
これを行うには、おそらくもっと多くの方法があります。最善のアプローチは何だと思いますか?
c# - 相互排除:これは安全ですか?
この相互排除のパターンは、私が思うほど安全ですか?もしそうなら、あなたはそれを何と呼びますか?
クリティカルセクションを確保したいのですが、他のスレッドがロックを取得するのを待って積み重なることはありません。明らかに、私はフラグが他のどこにも設定されていないことを確認します。もっと良い方法はありますか?
multithreading - なぜ「モニター」という名前なのですか?
ここで説明されているように、モニターについて言及しています。
http://en.wikipedia.org/wiki/Monitor_(同期)
ここでの定義はどれも適切ではないようです。
http://www.thefreedictionary.com/monitor
では、なぜ彼らはそう呼ばれているのでしょうか?
==更新==
皆さん、回答ありがとうございます!
モニターは通常、自分自身で動作しているとは考えていないため、混乱したと思います。これがここで起こっているようです。たとえば、ベビー モニターを使用して赤ちゃんを監視します。赤ちゃんが自分自身を監視するのはあまり意味がないと思いますが、間違っている可能性があります.
java - まだ実行していない場合にのみ Java プログラムを開始する
Java アプリケーションで、ユーザーが定義したパスを持つ 1 ~ 3 個の外部プログラムを開始する必要があります。私にはいくつかの要件があります:
すでに実行中のプログラムを実行したくない
Java アプリケーションからどのプログラムにもフォーカスを奪われたくない
それらのいずれかが起動に失敗したかどうかは気にしません。彼らはただ静かに失敗する必要があります。
これが私がこれまでに思いついたものです:
そして、他の 2 つのパスでそれをさらに 3 回繰り返します。これは期待どおりに始まり、3 番目の要件を問題なく満たしていますが、最初の 2 つで失敗します。
これを行う最善の方法は何ですか?
編集:
これらの他のアプリを制御することはできません。彼らはサードパーティです。また、いつでもユーザーが手動で開始または停止できた可能性があります。
実行可能ファイルの正確な名前 (「blah.exe」など) はわかっており、それらは常に同じですが、実行可能ファイルへのパスは必ずしも同じではありません。
ここでは、バッチ ファイル ラッパーは実行できません。
他のアプリはJava アプリではなく、単なる古い Windows 実行可能ファイルです。
c# - Mutex ストアド プロシージャ
データベース テーブルを使用して分散相互排除を作成したいと考えています。ストアド プロシージャに次のインターフェイスがあると便利です。
Wait(一意の識別子)
私はもともと、一意の識別子のテーブルを持つことでこれを実装することを考えていました。プロシージャーの呼び出しは、固有 ID がテーブルに存在しなくなるまで待機します。ただし、指定された一意の識別子がテーブルから削除されたときに、呼び出し元のスレッドを起動する方法がわかりません。
何か案は?データベースがこれを行うのに適切な場所ではない場合、動作するサードパーティのツールはありますか (できればオープンソース)?
(デッドロックを回避するために、待機操作にタイムアウトを含めるか、SqlCommand にタイムアウトを持たせたい)
c - 相互排除と C ソケット
各操作の前の開発者がソケットで実行され、複数のスレッドが読み書きする必要がある既存のシステムを維持しています。以前の開発者は、コントロールとミューテックスの下で io 操作を実行しました。C ソケット IO 操作を相互に除外する必要はありますか? それとも、ソケットが全二重であるため、ミューテックスの使用は冗長ですか? スレッドは 1 つだけ
スレッドがオブジェクトを入れる処理キューが共有メモリであり、それを相互に排除するように注意する必要があることに疑いの余地はありません。
c - 特定のシナリオに最適なLinuxカーネルロックメカニズムは何ですか
このシナリオのロックの問題を解決する必要があります。
- マルチCPUシステム。
- すべてのCPUは、共通の(ソフトウェア)リソースを使用します。
- リソースへの読み取り専用アクセスは非常に一般的です。(着信ネットワークパケットの処理)
- 書き込みアクセスの頻度ははるかに低くなります。(ほとんどの構成変更のみ)。
現在read_lock_bh
、write_lock_bh
(スピンロック)メカニズムを使用しています。問題は、CPUが多いほど、ライターのコンテキストでソフトロックアップが発生することです。
この本の並行性の章を読みましたが、スピンロックを使用するときにリーダーとライターのどちらが優先されるかを完全には理解できませんでした。
したがって、質問は次のとおりです。
- Linuxスピンロックメカニズムはリーダー/ライター/それらのどれも優先しませんか?
- シナリオでこれらのソフトロックアップを回避するために使用できるより良いメカニズムはありますか、または現在のソリューションを使用している間、ライターがロックを取得しようとするたびにライターを優先する方法はありますか?
ありがとう、ニル
multithreading - 読み取り/書き込み同期
操作を読み取り操作 (ルックアップなど) と書き込み操作 (挿入、削除など) に分類できるデータ構造があります。これらの操作は、次のように同期する必要があります。
- 書き込み操作の実行中に読み取り操作を実行することはできませんが (同じスレッド上でない限り)、読み取り操作は他の読み取り操作と並行して実行できます。
- 読み取り操作または書き込み操作の実行中に書き込み操作を実行することはできません (同じスレッド上でない限り)。
この種の同期はどのように実装できますか?
プラットフォームは win-api であるため、API の同期オブジェクトと連動機能が基本的なビルディング ブロックです。