問題タブ [condition-variable]

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.

0 投票する
5 に答える
6804 参照

c++ - C++ での条件変数の一般的な用途は何ですか?

条件変数について学習しようとしています。条件変数が使用される一般的な状況を知りたいです。

1 つの例は、2 つのスレッドがキューにアクセスするブロッキング キューです。プロデューサー スレッドはアイテムをキューにプッシュし、コンシューマー スレッドはキューからアイテムをポップします。キューが空の場合、コンシューマ スレッドはプロデューサー スレッドからシグナルが送信されるまで待機しています。

条件変数を使用する必要があるその他の設計状況はどのようなものですか?

ただし、実際のライブ アプリケーションでの例など、経験に基づいた例を希望します。

0 投票する
1 に答える
4031 参照

c++ - チェックされた値をアトミックに変更する場合、条件変数にはまだミューテックスが必要ですか?

条件変数を使用する一般的な方法を次に示します。

しかし、protected_by_mutex_var がたとえばコンペア アンド スワップ命令によってアトミックに設定されている場合、ミューテックスは何らかの目的を果たしますか (pthread やその他の API でミューテックスを渡す必要があること以外に)? 条件を実装するために使用される保護状態ですか?そうでない場合、これを行うのは安全ですか?:

ライターがリーダーのミューテックスと直接対話することはありませんか? 'protected_by_mutex_var' という名前はもはや適切ではないことに注意してください (もはやミューテックス保護ではありません)。もしそうなら、異なるリーダーが同じミューテックスを使用する必要さえありますか?

0 投票する
2 に答える
410 参照

concurrency - 条件変数が誤って起動することがあるのはなぜですか?

条件変数の使用方法が

条件変数が自発的に起動する場合があるためです。しかし、なぜそうなのか、私にはまったく理解できませんでした。過去に、その動作を持たない条件変数を作成するのは費用がかかると読んだことがありますが、それ以上のものはありません。

では、条件変数を待機しているときに誤って起こされることを心配する必要があるのはなぜですか?

0 投票する
10 に答える
83579 参照

c - pthread の条件変数関数にミューテックスが必要なのはなぜですか?

私は読んでいpthread.hます。条件変数関連の関数 ( などpthread_cond_wait(3)) には、引数としてミューテックスが必要です。なんで?私が知る限り、その引数として使用するためだけにミューテックスを作成するつもりですか? そのミューテックスは何をすることになっていますか?

0 投票する
1 に答える
522 参照

c++ - pthreads と条件変数を使用して、マルチスレッド アプリでのリアルタイム動作を改善するにはどうすればよいですか?

pthreads を使用するマルチスレッド アプリケーションがあります。私はミューテックス()ロックと条件変数()を持っています。2 つのスレッドがあり、1 つのスレッドが 2 番目のスレッド (ワーカー) のデータを生成しています。2 番目のスレッドは、生成されたデータをリアルタイムで処理しようとしており、1 つのチャックが可能な限り一定時間の経過に近づくように処理されます。

これは非常にうまく機能しますが、ワーカー スレッドが待機している状態をプロデューサー スレッドが解放するとき、ワーカー スレッドが制御を取得して再度実行するまでに、最大でほぼ 1 秒の遅延が見られることがあります。

私がこれを知っているのは、プロデューサーがワーカーが待機している条件を解放する直前に、別のチャックを処理する時間になるとワーカーの処理のチャックを行い、ワーカー スレッドで条件を受け取るとすぐに、それも行うためです。別のチャックを処理する時が来たら、処理のチャック。

この後者のケースでは、チャックの処理が何度も遅れていることがわかります。この効率の低下を解消し、チャックのカチカチ音をできるだけ望ましい周波数に近づけるためにできることをしたいと思います。

プロデューサーからの解放条件と、ワーカーが処理を再開するようにその条件が解放されたことが検出されるまでの遅延を減らすためにできることはありますか? たとえば、プロデューサーが何かを呼び出して、自分自身を強制的にコンテキスト スイッチ アウトにすることは役に立ちますか?

要するに、ワーカーは、プロデューサーに作業を作成するように要求するたびに待機する必要があるため、プロデューサーはワーカーのデータ構造をいじってから、ワーカーに再び並列実行する準備ができていることを伝えることができます。このプロデューサーによる排他的アクセスの期間は短いはずですが、この期間中に、プロデューサーが排他的アクセスを持っている間に、ワーカーに代わってプロデューサーが実行するリアルタイムの作業も確認しています。どういうわけか、再び並列実行に戻ると、回避したい大幅な遅延が発生することがあります。これを最もよく達成する方法を提案してください。

0 投票する
3 に答える
461 参照

c++ - これをマルチスレッド化するには?

2つのスレッドが必要です。最初の thread1 は、次の疑似関数を時々呼び出します。

2 番目の thread2 は、次の疑似ループで永遠に続きます。

複数のコアを持つマシンでスレッド 1 とスレッド 2 の両方が可能な限りビジー状態に保たれるようにこれを記述する最良の方法は何ですか。あるスレッドでの通知と別のスレッドによる検出との間の長い遅延を避けたいと思います。pthread 条件変数を使用してみましたが、thread2 が 'notify thread1 I am busy' を実行してから、ar2IsExclusive() の waitForThread2() のループまでの遅延が最大で 1 秒近くになることがわかりました。次に、揮発性の sig_atomic_t 共有変数を使用して同じものを制御しようとしましたが、何かがうまくいかないので、正しく実行していないに違いありません。

0 投票する
3 に答える
1606 参照

c - C プログラミングの並行スレッド

複数のスレッドで待機条件とシグナル条件を実装しているときに問題が発生しました。

スレッドはミューテックスをロックし、他のスレッドがシグナルを送るまで条件変数を待機する必要があります。その間、別のスレッドが同じミューテックスをロックし、同じ条件変数を待機します。現在、プロセス全体で同時に実行されているスレッドは条件変数を通知しますが、待機している最初のスレッドのみを通知し、他のスレッドは通知しないようにしたいと考えています。

0 投票する
2 に答える
1798 参照

boost - ブーストcondition_variable引数エラー

以下のコードでエラーが発生しました。

このエラーの原因は何ですか?

0 投票する
1 に答える
1530 参照

multithreading - win32 で条件変数 API を使用して複数のスレッドをウェイクアップする際の問題

winapi 条件変数がどのように機能するかを理解するのに問題があります。

より具体的に言えば、私が欲しいのは、いくつかのスレッドが何らかの条件で待機していることです。次に、WakeAllConditionVariable() 呼び出しを使用してすべてのスレッドを起動し、それらが機能できるようにします。スレッドを開始したいだけであるという事実に加えて、それらが動作を開始するための他の前提条件はありません(nプロデューサー/nコンシューマーシナリオの場合のように)。

これまでのコードは次のとおりです。

メインスレッド:

スレッド ルーチンのコードは次のとおりです。

このコードは、私が期待することをしません。1 つのスレッドだけがジョブを終了することもあれば、2 つまたは 3 つのスレッドが終了することもありますが、すべてのスレッドが終了することはありません。main 関数が WaitForMultipleObjects() 呼び出しを通過することはありません。

何が間違っていたのか正確にはわかりませんが、どこかで同期の問題があると思いますか?

どんな助けでも大歓迎です。(古いトピックを別のドレッシングで再投稿した場合は申し訳ありません:)

0 投票する
1 に答える
548 参照

java - マルチスレッド コードと条件変数の使用

マルチスレッド コードは、リソース (ファイル システムなど) に非同期的にアクセスします。

これを実現するために、条件変数を使用します。FileSystemが次のようなインターフェースであるとします。

にアクセスするアプリケーションができましたFileSystemreadFile()メソッドを介して複数の読み取りを発行できるとします。オペレーションは、渡されたバイト バッファにデータを書き込む必要があります。

これは条件変数を使用する正しい方法ですか? readFile()すぐに戻りますか?

(読み取りにロックを使用するのはばかげていることは知っていますが、ファイルへの書き込みもオプションです。)