問題タブ [boost-thread]
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++ - boost::スレッドの実行順序
連続して作成されたスレッドの実行順序に問題があります。これがコードです。
文字 (A から D) と生成 ID (i) がメソッド SomeWork にスレッドとして渡されるたびに。文字間の実行順序は気にしませんが、特定の文字、たとえば A の場合、x < y の場合、Ax は Ay の前に開始する必要があります。コードのランダム出力のランダム部分は次のとおりです。
どうすればそのような状態を避けることができますか?
ありがとう。
条件変数を使用して問題を解決しました。しかし、私は問題を少し変えました。解決策は、for ループのインデックスを追跡することです。そのため、各スレッドはいつ機能しないかを知っています。しかし、このコードに関する限り、他に 2 点お聞きしたいことがあります。
まず、私のコンピューターで for-loop インデックスを 350 に設定すると、アクセス違反が発生しました。310 はループの数で、問題ありませんでした。そのため、生成されるスレッドの最大数があることに気付きました。どうすればこの数を決定できますか? 次に、Visual Studio 2008 で、コードのリリース バージョンが非常に奇妙な動作を示しました。条件変数を使用せずに (1 行目から 3 行目がコメントアウトされています)、スレッドは順序付けされました。どのようにそれが起こることができますか?
コードは次のとおりです。
c++ - リリース ビルドで「破壊」に関するスレッドに参加しないとどうなりますか?
多くの場合、アクティブ オブジェクトのように動作する (スレッドを持つ) クラスがあります。アクセス違反を避けるために、私は常にデストラクタに参加するのを待たなければなりません。これは通常問題ではありません。
ただし、何らかのバグ (デッドロック、ライブロックなど) があるリリース ビルドを想像してみてください。これにより、join()
時間どおりに返されないか、まったく返されません。これにより、再度使用されないオブジェクトを待機している間、アプリケーション全体が機能しなくなります。これが顧客で発生すると、問題になります。
私はむしろ問題によって通知され、参加をスキップしたいと思います。そして、スレッドとそのリソースをリークします。
結合のスキップは、このような方法で実現できます。
これは良い考えですか?または、より良い戦略はありますか?
multithreading - boost::thread ミューテックスを使用して書き込みアクセスを同期する方法は?
と について初心者に質問がBoost::Thread
ありMutex
ます。
次の多くの並列インスタンスを開始したいのですがWorker
、それらはすべて同じに書き込みますstd::vector
:
ワーカーは書き込む前にロックし、完了したらロックを解除する必要があることを理解していますvec
(すべてのワーカーが同じベクターに書き込むため)。でもそれをどう表現すればいいの?
c++ - ブーストスレッド: 別のスレッドに移動する前にスレッドの実行時間を制限することは可能ですか?
メインスレッドと診断スレッドを備えたプログラムがあります。メイン スレッドは基本的に、while(1)
さまざまなタスクを実行するループです。これらのタスクの 1 つは、診断エンジンにシステムに関する情報を提供し、後で (次のループで) 再度チェックして、対処すべき問題がないかどうかを確認することです。メイン ループの反復には、0.1 秒以上かかることはありません。すべてが順調であれば、診断エンジンはほとんど時間をかけずに答えを返します。ただし、問題がある場合、診断エンジンが問題を特定するのに数秒かかることがあります。このため、診断エンジンは新しい情報を受け取るたびに、新しい診断スレッドを起動します。
私たちが抱えている問題は、診断スレッドがメイン スレッドから時間を盗んでいることです。事実上、2 つのスレッドがあっても、診断スレッドがまだ回転しているため、メイン スレッドは思うように頻繁に実行できません。
Boost スレッドを使用して、スレッドが別のスレッドに移動する前に実行できる時間を制限することは可能ですか? また、ここで重要なのは、使用している診断アルゴリズムがブラックボックスであるため、その中にスレッド コードを配置できないことです。ありがとう!
c++ - ブースト状態。私は何を間違っていますか?
run は boost::thread によって実行されます。Execute は、操作をキューに入れるためにメイン プログラム スレッドによって呼び出されます。ただし、条件付き待機から復帰するとクラッシュします。
私は何を間違っていますか?
multithreading - C ++のメモリフェンス/バリア:ブーストまたは他のライブラリにはそれらがありますか?
最近、マルチスレッド コードを同期し、コードの並べ替えを回避する方法として、メモリ フェンスとバリアについて読んでいます。
私は通常、Linux OS の下で C++ で開発を行っており、boost
ライブラリを大量に使用していますが、それに関連するクラスを見つけることができません。フェンスのメモリバリアがブーストに存在するかどうか、または同じ概念を実現する方法があるかどうか知っていますか? そうでない場合、どの良いライブラリを見ることができますか?
c++ - 保護されたデータを返すときにlock_guardを使用する方法
boost::lock_guard
ステートメント内のロック(または同様のスコープロック)の使用と、ロックによって保護されるべき変数の使用について質問がありますreturn
。
ローカルオブジェクトを破棄して戻り値をコピーする順序はどうですか?戻り値の最適化はこれにどのように影響しますか?
例:
これは正しいでしょうか(mDataがmMutexによって保護されている変数である場合)?または、以下の例に示すように、ローカルスコープと一時的なスコープを使用する必要がありますか?
c++ - 別のクラスを指す c++ でスレッド化を使用する方法
別のクラス ファイルの関数をスレッドとして使用する必要がある
私はクラスmaster
と関数を持っていますstart
..私はそれに値を渡して実行する必要があります.これを同じクラスで使用しましたが、うまく動作します...どこが間違っているのか誰か教えてください.
c++ - ブーストアップグレード可能なミューテックスの使用方法の例
いくつかの共有メモリ上でミューテックスロックを必要とするマルチスレッドサーバーアプリケーションがあります。
共有メモリは基本的にsTLマップなどです。
多くの場合、私は地図から読んでいます。しかし、私も時々それに追加する必要があります。
例:typedef std :: map MessageMap; MessageMap msgmap; boost:shared_mutex access_;
編集:私は異なるロックタイプを混乱させるかもしれません。
共有/アップグレードと排他の違いは何ですか。つまり、説明がわかりません。たくさんの読者を許可したいだけなら、共有アクセスだけを取得したいようです。また、共有メモリに書き込むには、アップグレードアクセスが必要です。それとも排他的ですか?ブーストの説明は明確ではありません。
あなたが書くかもしれないので、アップグレードアクセスは得られますか?しかし、共有とは、あなたが間違いなく書かないことを意味します。それはそれが何を意味するのでしょうか?
編集:私がやりたいことをもう少し明確に説明しましょう。私はまだ答えに満足していません。
これがもう一度例ですが、私が使用しているコードの例もあります。実際のコードではなく、単なる説明です。
c++ - boost::thread スレッド内での例外の使用
私はboost::threadsをいじり始めましたが、私はこの問題に悩まされています:
スレッド内でキャッチしようとするため、例外がスローされるとすぐにこのプログラムがクラッシュする理由がわかりません。処理がスローと同じスレッドで行われる限り、例外を処理できると思いましたか?
追加情報:
*MinGW32の使用
*Boost v.1.44
*マルチスレッド デバッグ DLL に対する動的リンク スレッド ライブラリのバージョン