問題タブ [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.
macos - Mac OS X の Pthreads - ミューテックスの問題
POSIX スレッドを使用して C で並列アルゴリズムをプログラムする方法を学ぼうとしています。私の環境は、gcc 4 を搭載した Mac OS X 10.5.5 です。
コンパイル:
したがって、私の問題は、これをUbuntu 9.04ボックスでコンパイルすると、スレッド順にスムーズに実行され、Macではミューテックスが機能しないように見え、スレッドは共有情報を取得するのを待ちません。
マック:
Ubuntu
何か案は?
ソースコードの下に従ってください:
ruby-on-rails - RailsプロセスのMutex
PassengerまたはMongrelを介してRailsをデプロイする場合、アプリケーションの複数のインスタンスが実行されています。ローカルファイルやリモートファイルへの書き込みなど、共有リソースでミューテックスを確立するためのベストプラクティスまたはパターンは何ですか。2つのプロセスが同時に同じリソースに書き込んでいないことを確認したいと思います。
.net - ミューテックスは正しく実装されていますか?どうすれば破棄できますか?
いくつかのコードを見直していますが、コード分析 (fxCop) の警告の 1 つに非常に混乱しています。このコードは、次のように、クラスの開始時に変数を作成することにより、いくつかのミューテックスを実装します。
fxCop は、Mutex クラスが実装しているため、クラスに IDisposable を実装する必要があるというメッセージを表示しています。これは警告CA1001です。ただし、Mutex を見ると、dispose メソッドがありません。
Mutex はSafeWaitHandle (これは IDisposable を実装しています - これが fxCop が拾っているものだと推測します) を使用しますが、mutex は実際には標準の破棄可能なパターンを介してそれを破棄しません。RuntimeHelpers.CleanupCodeを使用してデリゲートに割り当てられるプライベート メソッドがあります。これは、私が理解しているように、例外で実行されることを意味します。
これにより、次の 2 つの疑問が生じます。
- Mutex は正しく実装されていますか? Mutex に例外がない場合、SafeWaitHandle は破棄されません。
- ミューテックスをクリーンアップするには、dispose で何を呼び出す必要がありますか?
language-agnostic - ミューテックスはどのように実装されますか?
特定のアプリケーションに対して、他の実装より優れている実装はありますか? 独自のものを展開することで得られるものはありますか?
c++ - ReleaseMutex() を 2 回実行するとどうなりますか?
ReleaseMutex()
Microsoft のドキュメントは、ミューテックスが既にロック解除されているときに誤って呼び出すとどうなるかについて沈黙しています。
詳細:
コンパイラにアクセスせずに Windows コードを修正しようとしています。
WinApi ミューテックスはすべて再帰的であり、参照カウントされることを認識しています。私がその機能を利用していた場合、余分なReleaseMutex()
呼び出しによって参照カウンターが時期尚早にデクリメントされることは明らかです。
ただし、私が見ているコードはミューテックスを再帰的に使用していないため、参照カウントが「1」より大きくなることはありません。必要以上にミューテックスを解放します...どうなりますか?参照カウントは負になりますか? ゼロ (ロック解除) のままで、無視できるエラーを返すだけですか?
(当然、このコードはこれらの関数を呼び出すときに実際にエラーをチェックしません!)
windows - ISAPI フィルターで、複数のプロセスに共通のログファイルを作成するための適切なアプローチは何ですか?
IIS6 または 7 で実行される ISAPI フィルターがあります。複数のワーカー プロセス (「Web ガーデン」) がある場合、フィルターは各 w3wp.exe で読み込まれて実行されます。
フィルタがそのアクティビティを 1 つの統合ログファイルに効率的に記録できるようにするにはどうすればよいですか?
異なる (同時) プロセスからのログ メッセージが互いに干渉してはなりません。つまり、w3wp.exe のいずれかから出力された 1 つのログ メッセージは、ログ ファイル内の 1 つの連続した行として認識される必要があります。
ログファイルの競合は最小限に抑える必要があります。Web サイトは、1 秒あたり数百のリクエストを処理する場合があります。
厳密な時間順が優先されます。つまり、w3wp.exe プロセス #1 が t1 でメッセージを送信し、次にプロセス #2 が t2 でメッセージを送信し、次にプロセス #1 が t3 でメッセージを送信した場合、メッセージは適切な時間順にログ ファイルに表示されます。
私が現在行っているアプローチは、各プロセスが個別のログファイルを所有するというものです。これには明らかな欠点があります。
いくつかのアイデア:
w3wp.exe の 1 つを「ログファイルの所有者」に指名し、その特別なプロセスを通じてすべてのログ メッセージを送信します。これには、ワーカー プロセスのリサイクルの場合に問題があります。
OS ミューテックスを使用してログファイルへのアクセスを保護します。これで十分な高性能ですか?この場合、各 w3wp.exe は同じファイルシステム ファイルに FILE を持ちます。書き込みごとにログファイルをフラッシュする必要がありますか? これは機能しますか?
助言がありますか?
c++ - 読み取りにはミューテックスが必要ですか?
状態 (単純な列挙型) を持ち、2 つのスレッドからアクセスされるクラスがあります。状態を変更するには、ミューテックス (boost::mutex) を使用します。状態をチェックするのは安全ですか (たとえば、state_ == ESTABLISHED を比較します)、またはこの場合もミューテックスを使用する必要がありますか? 言い換えれば、別のスレッドによって同時に書き込まれる可能性のある変数を読みたいだけの場合、ミューテックスが必要ですか?
windows - ミューテックスによってブロックされた待機スレッドの実行順序
複数のスレッドから単一のオブジェクトへのアクセスを制御するミューテックスがあります。スレッドが終了すると、ミューテックスのロックが解除され、オーダー スレッドがオブジェクトを操作できるようになります。WaitForSingleObject 関数を使用する Windows では、スレッドが通知される順序はありますか? ミューテックスをロックしようとする最初のスレッドが、ミューテックスのロックを許可されるようにします。ブロックされたスレッドへのシグナルがランダムにならないように、これは FIFO キューになります。これを実現するには、独自のキューイング メカニズムを実装する必要がありますか? もしそうなら、どの機能が便利ですか?
c# - c#のミューテックスとセマフォとは何ですか? どこに実装する必要がありますか?
C#のミューテックスとセマフォとは? どこに実装する必要がありますか?
マルチスレッドでそれらをどのように扱うことができますか?
ruby - Rubyでのスレッドロック(soap4rとQTの使用)
[メモの編集:コンストラクターにミューテックスの作成を入れたことに気づきました。動かして、変化がないことに気づきました。]
[注2を編集:試運転でapp.execの呼び出しをに変更しました
Soap4rサービスの実行が開始されると、プロセスイベントが再度呼び出されることはないことに気付きました]
[注3を編集:ここに関連する質問を作成しました:Soap4rを使用したルビーのスレッドロックアップ
モニターに描画するSOAPコマンドを受信するrubyプログラムを作成しようとしています(したがって、リモートモニターアクセスが可能になります)。アイデアのプロトタイプを作成するための簡単なテストアプリをまとめました。グラフィックツールキットはQTです。ロックに問題があると思います。示されているコードで、サーバーのメソッドをテストするための呼び出しを追加しました。私が今テストしているサーバー側は次のとおりです。
これを実行すると、次の出力が得られます。
サーバーを起動しようとしています
か?
受信コール
0
#<Qt::MainWindow:0x60fea28>
インロック
受信コール
0This
#<Qt::MainWindow:0x60fea28>
:1--
インロック
This:2--
アウトロック
その時点で、私が期待する合計5つの追加を受け取るのではなく、ハングします。Qtは、「createWindow(10,0,10,10)」および「createWindow(10,10,10,10)」で定義された正方形を表示します。「This:1--」と「This:2--」が次のイン/アウトロックペア内に表示されることを考えると、ミューテックスをひどく間違って使用していると思います。Rubyでスレッド化するのはこれが初めてです。