問題タブ [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++ - どのミューテックスがOSに最大の時間を与えているかを検出する方法は?
ミューテックスによってOSに与えられた時間を測定する方法は? 主な目標は、スレッドを最長時間ブロックするミューテックスを検出することです。
PS: oprofile を試してみました。vmlinux/.poll_idle 内で費やされた時間の 30% がレポートされます。アプリはそのコアの 100% を使用するように設計されているため、これは予期しないことです。したがって、ミューテックスを待っている間に時間がOSに返され、oprofileがそれをIDLE時間として報告しているのではないかと思います。
c++ - Boost scoped_lock がミューテックスのロックを解除しないのはなぜですか?
私はboost::mutex::scoped_lock
この方法で使用しています:
基本的には、waitBoolean を設定し、他のスレッドは、waitBoolean を false に設定することで完了したことを通知します。
ただし、他のスレッドが mutex_ のロックを取得できないため、これは機能していないようです!!
scoped_lock を角かっこで囲むことで、そのロックが終了すると想定していました。そうじゃないの?オンラインで読むと、デストラクタが呼び出されたときにのみミューテックスを放棄すると書かれています。そのローカルスコープの外に出ると破棄されませんか?
コードのシグナリング部分:
ありがとう!
c++ - pthread ミューテックスのオーバーヘッド?
C++ API (Linux および Solaris 用) をスレッドセーフにしようとしています。これにより、内部データ構造を壊すことなく、その関数を異なるスレッドから呼び出すことができます。私の現在のアプローチでは、メンバー変数へのすべてのアクセスを保護するために pthread ミューテックスを使用しています。これは、単純なゲッター関数がミューテックスをロックおよびロック解除することを意味します。この API は主に、ミューテックス ロックが純粋なオーバーヘッドのように見えるシングル スレッド アプリで使用されるため、特にこのオーバーヘッドが心配です。
だから、私は尋ねたい:
- ロックを使用するシングル スレッド アプリとロックを使用しないアプリのパフォーマンスを比較した経験はありますか?
- これらのロック/ロック解除呼び出しは、たとえばと比較してどれくらい高価ですか。boolメンバー変数への単純な「return this->isActive」アクセス?
- そのような変数アクセスを保護するより良い方法を知っていますか?
c++ - ミューテックスが 1 つだけであることを確認するにはどうすればよいですか?
ここでスレッドセーフなコードを実行しています。一度に 1 つのスレッドのみで実行する必要があるコードのセクションを保護するためにミューテックスを使用しています。私が抱えている問題は、このコードを使用すると、2 つの Mutex オブジェクトが作成されることがあります。ちなみに静的関数です。ミューテックス オブジェクトが 1 つだけ作成されるようにするにはどうすればよいですか??
java - アプリケーションが別のプロセスによって作成されたミューテックス参照を保持する理由/方法は?
私はこのやや変わったプロセス構造を持っています:
- Launch4J が Java アプリケーションを起動します。Java アプリケーションに単一インスタンス機能を提供するミューテックスを作成します。
- Java アプリケーションは、複数のインスタンスを持つことができる VB6 アプリケーションを開始します。
- Java アプリケーションが終了しても、VB6 アプリケーションはまだ実行されています。(望ましい行動)
問題は、Launch4J によって作成されたミューテックスが、VB6 アプリケーションの終了後にのみ解放されることです。そのため、Java アプリケーションを再度開始することはできません。
なぜこれが起こるのでしょうか?私はミューテックスを明示的に開いていません...
CreateProcess
最初はwithを使用している Java が原因ではないかと疑っていましたが、たとえば、bInheritHandles == true
起動すると問題は発生しません。notepad.exe
編集:私はまだこの問題を抱えています。どんなポインタでも大歓迎です!
c - C-Pthreadのミューテックスと一般的な頭痛
やあみんな私は誰かが少し助けを提供できるかどうか疑問に思っていました。
私は自分自身にpthreadを教えようとしてきましたが、それを使用して、不正なデータの読み取りと書き込みを行わずに、スレッドを一緒に実行して同じ構造を使用するようにミューテックスロックを使用します。
現時点での私の問題は、
スレッド関数から、次のようなヘルパー関数を呼び出すと、次のようになります。
上記のヘルパーメソッドは、構造を「更新」していないようです。
しかし、スレッド関数で同じコードを実行すると、これとまったく同じ4行が機能するようです。
私は何が間違っているのですか?または、これを修正するにはどうすればよいですか?誰かが同様にいくつかの読書を提供することができれば、それは完璧でしょう。
編集:私のコードのタイプミスでしたごめんなさい。
これが私が構造に使用している実際のコードです。
addCarの同じ行がスレッド関数にある場合はサイズが大きくなりますが、このヘルパー関数にある場合は大きくなりません。
これが呼び出しコードです
python - Django: 単純なレート制限
私のビューの多くは、外部リソースをフェッチします。重い負荷の下でリモートサイトを爆破しないようにしたい (および/または禁止されないようにしたい)。
私はクローラーを 1 つしか持っていないので、中央のロックで問題なく動作します。
詳細: 1 秒あたり最大 3 つのホストへのクエリを許可し、残りのブロックを最大 15 秒にしたいと考えています。どうすれば(簡単に)これを行うことができますか?
いくつかの考え:
- ジャンゴキャッシュを使用する
- 1秒の解像度しかないようです
- ファイルベースのセマフォを使用する
- 並行性のためのロックを簡単に行うことができます。1 秒間に 3 回のフェッチのみを行うようにする方法がわかりません。
- 一部の共有メモリ状態を使用する
- これ以上インストールしたくないのですが、必要に応じてインストールします。
mutex - ミューテックスのリストを取得しますか?
プログラムは、起動時にミューテックスを作成します。このミューテックスの形式がわからないので、放棄されていないすべてのミューテックスのリストを取得し、プログラムを開いて新しいリストを取得し、重複するエントリをすべて削除してミューテックスを見つけることができるかどうかを確認する方法があるかどうか疑問に思いました.
このリストを取得する方法はありますか?
c++ - コンマ演算子のLHSで匿名のmutex-lock-holdingクラスインスタンスを初期化する
次のようなコードがあるとします。
関数test_raiicomma_1
()が複数のスレッドから呼び出された場合、ミューテックスをロックして、他のスレッドも同時に呼び出さFunc()
れないようにします。ミューテックスは、変数mut1_lock
が作成されるとロックされ、スコープから外れて破棄されると解放されます。
これは完全に正常に機能しますが、スタイルの問題として、ロックを保持している一時オブジェクトに名前を付ける必要があると、私はイライラしました。関数test_raiicomma_2()
は、ロックオブジェクトを初期化し、1つの式内で関数を呼び出すことにより、これを回避しようとしますFunc()
。
Func()
一時オブジェクトデストラクタは、式が戻った後、式が終了するまで呼び出されないというのは正しいですか?(もしそうなら、このイディオムを使用する価値があると思いますか、それとも別のステートメントでロックを宣言する方が常に明確ですか?)
関数test_raiicomma_3()
が2つのミューテックスをロックする必要がある場合、ミューテックスが呼び出す前に順番にロックされ、Func()
後で解放されるのは正しいですか?残念ながら、どちらの順序でも解放される可能性がありますか?
c# - 処理する次の ID を認識し、その番号を安全にインクリメントする必要がある多くのスレッドを作成するにはどうすればよいですか?
私は、データを処理するスレッドの束を持つプログラムに取り組んでいます。
各スレッドは、次に利用可能な ID を取得し、次のスレッドのためにその ID を 1 ずつ増やし、これをスレッドセーフな方法で行う必要があります。
これはミューテックスを使用するインスタンスですか? 代わりに Queue.Synchronized を使用して、300,000 個の ID をすべて入力する必要がありますか、それとも不要ですか?
単一の整数を使用して、その番号の取得と更新を何とかロックして、thread1 が入ってきて、次の ID として「20」を取得し、別のスレッドが待機している間にそれを「21」にインクリメントする必要がありますか?
このユースケースのベストプラクティスは何ですか?