問題タブ [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 投票する
1 に答える
8833 参照

synchronization - 条件変数

オペレーティングシステムのプロセスの同期における条件変数の原則は何ですか?

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

multithreading - 条件変数のコストはいくらですか?

問題のマシンで未使用の実行リソースが使用可能であると仮定します。つまり、すべての CPU が使用されているわけではありません。スレッドが条件変数を待機している場合、このスレッドのウェイクアップに関連するコストはどれくらいですか? 同様に、条件変数の待機に関連するコストはどれくらいですか? 大まかな定量化とコストの発生源の両方に興味があります。答えが「場合による」である限り、私は主に x86/x64 上の Windows と Linux の最近のバージョンに関心があります。

編集: カーネル呼び出しが関係しているため、カーネル呼び出しは通常の関数呼び出しよりもどれくらい高価ですか?

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

c++ - C ++:スレッド同期

Boostライブラリを使用して(同じC ++マップで動作する)2つのスレッドを同期しようとしています。私はC++の専門家ではなく、ブーストのドキュメントを理解するのは非常に難しいと言わなければなりません。

私が達成したいのは、次のようなものです。

Mutexとcondition_variablesを使用しようとしましたが、コードが正しく機能していませんでした。具体的には、thread2がウェイクアップしているとき(cond。変数を待機した後)、マップに直接アクセスすることはできませんでしたが、他の誰かがアクセスしてマップを空にしました。そのため、アクセスしたときにマップが空のときにマップがいっぱいになると予想していたため、セグメンテーション違反が発生しました。

さらに、次のようなものと次のような呼び出しの違いを理解したいmymutex.lock()と思いboost::mutex::scoped_lock scopedLock(mutex_)ます。またはunique_lock

教えてくれてありがとう:)

編集:ここで私は自分のコードの関連部分を抽出しようとしました。同期がどのように機能するかよく理解していなかったので、あまり意味がないかもしれません...

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

c - 条件変数の使用方法

Linuxプログラミングインターフェイスの本には、条件変数がどのように機能するかを示すコード(プロデューサー/コンシューマー)があります。

なぜ使用pthread_mutex_lockするのwhileですか?なぜそれを使用しないのifですか?

0 投票する
4 に答える
1492 参照

c - pthread_cond_signal()によってウェイクアップされたが、ミューテックスの競合を失ったスレッドはどうなりますか

これについて: 条件変数の使用方法

そのようなコードを実行するコンシューマースレッドがいくつかあるとします(参照ページからコピー):

ここでのシナリオは次のとおりです。メインスレッドはpthread_cond_signal()を呼び出して、コンシューマースレッドに何らかの作業を行うように指示します。

私が理解しているように、後続のスレッドはpthread_mutex_lock()を呼び出し、次にpthread_cond_wait()(ミューテックスをアトミックにロック解除します)を呼び出します。今では、どのコンシューマースレッドもミューテックスを要求しておらず、すべてpthread_cond_wait()を待機しています。

メインスレッドがpthread_cond_signal()を呼び出すと、マンページに続いて、少なくとも1つのスレッドがウェイクアップされます。それらのいずれかがpthread_cond_wait()から戻ると、自動的にミューテックスを要求します。

だから私の質問は:提供されたサンプルコードに関して今何が起こっているのですか?つまり、ミューテックスのコンテストに負けたスレッドは今何をしているのでしょうか?

(ミューテックスを獲得したスレッドは、残りのコードを実行してミューテックスを解放する必要があります。失われたスレッドは、ミューテックスを待機している必要があります-最初のネストされた whileループのどこか-勝者がそれを保持し、解放された後それまでに満たされるので、pthread_cond_wait()でブロックを開始しwhile (avail == 0)ます。私は正しいですか?)

0 投票する
4 に答える
4306 参照

c++ - Windows では CONDITION_VARIABLE。コンパイルしない

Linux 用に書かれたプログラムの Windows バージョンを C++ で作成しようとしています。プログラムをスレッド セーフにするために、Linux バージョンではpthread_cond_tandを使用します。pthread_cond_waitこれらの関数はミューテックスを使用して、待機中のスレッドが実際に待機していることを確認します。

CONDITION_VARIABLEWindowsでうまくいくかもしれませんが、コンパイルできない理由がわかりません。私が知る限り、関連するすべてのヘッダーが含まれていても、「エラー: 'CONDITION_VARIABLE' は型に名前を付けていません」というエラーが表示されます。http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspxでコードをコピーして貼り付けてみましたが、どちらもコンパイルされません。私はGCCを使用しています。

これをコンパイルする方法についてのアイデアはありますか? または condition_variables を含まない代替アプローチはありますか?

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

c - 条件変数のデッドロックを解除する

スレッド1が条件変数Aを待機している状況があります。これは、スレッド2によってウェイクアップされる必要があります。スレッド2は、条件変数Bを待機しており、スレッド1によってウェイクアップされる必要があります。条件変数、私はそのようなデッドロック状況を避けることはできません。サイクル(デッドロック)を検出し、デッドロックに参加しているスレッドの1つを終了します。

さて、私がよくわからないのは、条件変数を待機しているスレッド1などのスレッドを単純に終了する方法です。

いくつかのポインタに感謝します。ありがとう

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

c - 条件変数を待っている多くのスレッドの中から特定のスレッドにシグナルを送る

この質問は、Breaking a condition variable deadlockからの質問です。多数のスレッドが条件変数を待機している可能性があります。スレッド 1 などの特定のスレッドにのみシグナルを送信し、デッドロック シナリオの参加者であったスレッドを強制終了する必要があります。多くの中で特定のスレッドだけを知らせる方法はありますか.

いくつかの助けに感謝します

ありがとう

編集; Nemo のコメントを尊重します。これは悪い考えだと理解しています。しかし、それを行う方法はありますか

0 投票する
0 に答える
1878 参照

mutex - futex を使用したミューテックスと条件変数の実装

futex syscall を使用してミューテックスと条件変数を実装しました。私の実装は正しいと思いますが、他の人に検証してもらいたいです。その正しさを検証していただける方がいらっしゃいましたら、大変助かります。

ミューテックスと条件変数のパフォーマンスをさらに改善するための提案も歓迎します。

ありがとう

スーダンシュ

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

python - Pythonのthreading.Condition.wait()は実行をすぐに一時停止しますか?

Python条件変数を呼び出すwait()と、呼び出し元のスレッドは実行を一時停止してyieldしますか、それとも次のコンテキストスイッチまでブロックし続けますか?