問題タブ [mutex]
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.
c# - C# のさまざまなスレッド同期オプションの違いは何ですか?
誰かが次の違いを説明できますか:
- ロック (someobject) {}
- ミューテックスの使用
- セマフォの使用
- モニターの使用
- その他の .Net 同期クラスの使用
私はそれを理解することはできません。最初の2つは同じように思えますか?
c++ - この小さなミューテックス コードの何が問題になっているのでしょうか?
Entrek Codesnitch ソフトウェアを使用してメモリ リークなどをデバッグおよびテストすると、次のエラーが報告されます。
たぶん、眠れぬ夜のすべてがついに私に届いています。しかし、私はそれが何について不平を言っているのか正確にはわかりません。何か案は?
linux - ロックファイルを使用してスクリプトの 2 つのインスタンスが同時に実行されるのを回避するときに競合状態を回避するにはどうすればよいですか?
同じスクリプトの 2 つのインスタンスが同時に実行されるのを回避する一般的な方法は、次のようになります。
競合状態を回避して、シェルスクリプトからファイルをロックするより良い方法はありますか? 代わりにディレクトリを使用する必要がありますか?
c# - C# ミューテックス - ASP.NET およびコンソール アプリケーションからの呼び出しエラー
ASP.NET アプリケーションとコンソール アプリケーション間のファイル アクセスの同期に、グローバルな名前付きミューテックスを使用しています。
ASP.NET アプリケーションの実行中に、コンソール アプリケーションがミューテックスの取得に失敗する - 予想どおり。コンソール アプリケーションの実行中に、ASP.NET アプリケーションがスローします。UnauthorizedAccessException: Access to the path 'Global\TheNameOfTheMutex' is denied.
例外をキャッチして、ミューテックスの取得に失敗したように処理しようとしますが、なぜこのように動作するのか知りたいですか? ASP.NET アプリケーションは、2 つの異なるブラウザーからアクセスした場合に期待どおりに実行され、コンソール アプリケーションも複数のインスタンスを実行している場合に期待どおりに実行されます。
更新: Windows XP では、ASP.NET アプリケーションの実行中にコンソール アプリケーションを起動しようとすると、例外もスローされます。
同期に使用されるコードは、共通のアセンブリにあります。
環境: Windows Server 2008、IIS 7、ASP.NET 2.0
com - Nantのミューテックスロック
NantにMutexロックを実装するにはどうすればよいですか?この機能が必要な理由は、ビルドを機能させるためにCOMコンポーネントを登録するためです。次に、ビルドの最後に、COMコンポーネントの登録を解除します。
ミューテックスロックがないと、異なるバージョンのCOMが登録され、いくつかの問題が発生します。
したがって、NantスクリプトでMutexロックを適用するとよいでしょう。そうすれば、ビルドが実行されている場合、他のプロジェクトはそれが完了するまで待機します。
initialization - pthread_mutex_t 初期化エラー
tiger で xcode 2.4.1 を使用しています。以下を実行すると、すべて問題ありません。私がする時
これら2つのエラーが発生します
どうしてか分かりません。ただし、 pthread_mutex_t ミュート = PTHREAD_MUTEX_INITIALIZER; を実行すると、それは正常に動作します。なんで?
-編集-実行していませんが、これはコンパイルできるようです。なんで?は?
mutex - 相互排除問題
次の疑似コードを見てください。
上記のコードを使用して、単純な相互除外ソリューションを実装できると思いました。しかし、それは機能していません。誰かが理由を知っていますか?
どんな助けでも本当に感謝します!
c# - C# - Mutex のロックの問題
どの Web アプリケーションがロード バランサーからトラフィックを処理するかを制御する Web アプリケーションがあります。Web アプリケーションは、個々のサーバーで実行されます。
ASP.NET アプリケーション状態のオブジェクト内の各アプリケーションの "in または out" 状態を追跡し、状態が変更されるたびに、オブジェクトはディスク上のファイルにシリアル化されます。状態は、Web アプリケーションの開始時にファイルから逆シリアル化されます。
サイト自体は 1 秒に数件のリクエストしか取得せず、ファイルへのアクセスはめったにありませんが、何らかの理由で、ファイルの読み取りまたは書き込み中に衝突が非常に発生しやすいことがわかりました。サーバーへのローリング展開を定期的に行う自動化されたシステムがあるため、このメカニズムは非常に信頼できるものである必要があります。
上記のいずれかの慎重さに疑問を呈するコメントをする前に、その背後にある理由を説明すると、この投稿がこれまでよりもずっと長くなってしまうので、山を動かすことは避けたいと思います.
つまり、ファイルへのアクセスを制御するために使用するコードは次のようになります。
これは通常は機能しますが、ミューテックスにアクセスできない場合があります (ログに「ロックを取得できませんでした」というイベントが表示されます)。これをローカルで再現することはできません。実稼働サーバー (Win Server 2k3/IIS 6) でのみ発生します。タイムアウトを削除すると、後続のリクエストを含め、アプリケーションが無期限にハングします (競合状態??)。
エラーが発生した場合、イベント ログを見ると、ミューテックス ロックが達成され、エラーがログに記録される前に以前の要求によって解放されたことがわかります。
ミューテックスは Application_Start イベントでインスタンス化されます。宣言で静的にインスタンス化すると、同じ結果が得られます。
言い訳、言い訳: スレッド化/ロックは私の得意分野ではありません。通常は気にする必要がないからです。
ランダムに信号を取得できない理由について何か提案はありますか?
アップデート:
適切なエラー処理を追加しましたが (恥ずかしいことです!)、それでも同じエラーが発生します。記録としては、未処理の例外が問題になることはありませんでした。
ファイルにアクセスするプロセスは 1 つだけです。このアプリケーションの Web プールに Web ガーデンは使用せず、他のアプリケーションはファイルを使用しません。私が考えることができる唯一の例外は、アプリ プールがリサイクルされ、新しい WP が作成されたときに古い WP がまだ開いている場合ですが、タスク マネージャーを見て、ワーカー プロセスが 1 つしかないときに問題が発生することがわかります。
@mmr: Monitor の使用と Mutex の使用の違いは何ですか? MSDN のドキュメントに基づくと、効果的に同じことを行っているように見えます。Mutex でロックを取得できない場合は、falseを返すだけで正常に失敗します。
注意すべきもう 1 つの点: 私が抱えている問題は完全にランダムなようです。1 つの要求で失敗した場合、次の要求ではうまくいく可能性があります。パターンもないようです (確かに、少なくとも他のすべてではありません)。
更新 2:
このロックは、他の呼び出しには使用されません。_lock が InvokeOnFile メソッドの外部で参照されるのは、インスタンス化されるときだけです。
呼び出される Func は、ファイルから読み取ってオブジェクトに逆シリアル化するか、オブジェクトをシリアル化してファイルに書き込みます。どちらの操作も別のスレッドでは行われません。
ServerState.PATH は静的な読み取り専用フィールドであり、同時実行の問題が発生することはないと思います。
また、これをローカル (Cassini) で再現できないという以前の指摘を繰り返したいと思います。
学んだ教訓:
- 適切なエラー処理を使用してください (当たり前!)
- 仕事に適したツールを使用してください(そして、そのツールが何をどのように行うかについての基本的な理解を持ってください). sambo が指摘しているように、Mutex を使用すると明らかに多くのオーバーヘッドが発生し、それが私のアプリケーションで問題を引き起こしていましたが、Monitor は .NET 専用に設計されています。
c++ - なぜロックが機能するのですか?
一度に 1 つのスレッドのみがロックされたデータにアクセスすることをロックが保証する場合、何がロック機能へのアクセスを制御するのでしょうか?
ローカル変数が別のスレッドによって予期せず変更されないように、各関数の先頭にboost::mutex::scoped_lockを配置する必要があると思いましたが、正しいですか? 2 つのスレッドが非常に近い時間にロックを取得しようとするとどうなりますか? 内部で使用されるロックのローカル変数は、他のスレッドによって破損されませんか?
私の質問はブースト固有のものではありませんが、別のものを推奨しない限り、おそらくそれを使用します。
delphi - プログラムの別のインスタンスがすでに実行されているかどうかを確認するにはどうすればよいですか?
プログラムの1つのインスタンスが実行されているかどうかを確認するにはどうすればよいですか?私はデータファイルでこれを行うことができると思いましたが、それは面倒です:(
一度に1つのインスタンスのみを開いてほしいので、これを実行したいと思います。