問題タブ [boost-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.

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

c++ - boost-threads: scoped_lock を呼び出し先に渡すにはどうすればよいですか?

ブーストスレッドライブラリは初めてです。ある関数で取得scoped_lockし、呼び出し先でそれを待機する必要がある状況があります。

コードは次の行にあります。

基本的に、 functiond()では、取得したスコープ付きロックにアクセスしてa()待機できるようにする必要があります。それ、どうやったら出来るの ?(他のスレッドが通知します)。

または、ロックの代わりにミューテックスを直接待つことはできますか?

どんな助けでも大歓迎です。ありがとう !

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

c++ - 2 つの異なるクラスで Boost ミューテックスを使用する

次のメソッドでプライベートメンバーとして MessageQueue クラスのブーストミューテックスを使用しています

reqCollection はマップです

内部リクエストでミューテックスを初期化しようとすると、以下のエラーが発生します

ここでグーグルでこのエラーを検索した限り、問題の解決策は次のように述べられています

ミューテックスまたはミューテックスを含むクラスの (スマート) ポインターを配置する

しかし、これは、プロジェクト全体でポインターを渡すことによって 1 つのミューテックス変数しか使用できないということですか? ブーストがミューテックスを保護している理由

エラーは

エラー 7 エラー C2248: 'boost::mutex::mutex': クラス 'boost::mutex' で宣言されたプライベート メンバーにアクセスできません

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

c++ - Boost::mutexパフォーマンスとpthread_mutex_t

pthread_mutex_t事前にsを使っていました。コードが動かなくなることがありました。ラップした関数全体に数行のコードが散在していました...

コードがどこでどのようにスタックしていたかわからないので、に切り替えましpthread_mutex_tboost:mutex

1)1行目と3行目を1行目で置き換えるだけboost::lock_guard<boost::mutex> lock(map_mutex);で、すべてが問題なく機能する場合、pthreadの実装で何が問題になる可能性がありますか?

2)ブーストに切り替えてパフォーマンスをあきらめていますか?ここで重要な部分は非常に時間に敏感なので、ミューテックスを非常に軽量にしたいと思います。(C ++、redhat)

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

c++ - クラスのさまざまなインスタンス間でミューテックスをどのように共有しますか?

あるクラスのミューテックスを別のクラスの異なるインスタンス間で共有する方法を考えていました。

現在、プライベートメンバー変数としてBoostmutexとcondition_variableを持つクラスIndexerがあります。メインにIndexerクラスのauto_ptrを作成し、Indexerのポインターを別のクラスRobotのインスタンスに渡します。

私は次のようにそれを行います:

ロボットのコンストラクターは次のとおりです。

ロボットのヘッダーは次のようになります。

ただし、ミューテックスはコピーできないため、エラーが発生します。

mutexとcondition_variableshared_ptrsを作成することを考えていましたが、これにより予期しない動作が発生する可能性があることを読みました。

誰かがこれを行うための適切な/正しい方法を教えてもらえますか?

ありがとうございました!

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

c++ - マルチスレッドプログラムのプロデューサー/コンシューマー[ブースト]

私はブーストライブラリとC++で遊んでいます。プロデューサー、コンシューマー、およびスタックを含むマルチスレッドプログラムを作成したいと思います。プロキューダーがスタックを埋め、コンシューマーがスタックからアイテム(int)を削除します。すべてが機能します(ポップ、プッシュ、ミューテックス)しかし、ポップ/プッシュウィンシンをスレッドと呼ぶと、効果がありません

私はこの簡単なコードを作りました:

VC ++ 2010 / win7で実行した後、次のようになりました:0 0

メインからfillStack関数を呼び出すと効果が得られるのに、スレッドから呼び出すと何も起こらない理由を理解するのを手伝ってもらえますか?ありがとうございました

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

c++ - ヒープの破損とミューテックス

アプリケーションに重大なバグがあり、何が起こっているのかを理解しようとしています.クラッシュの直前にいくつかのログがあります。単純にバグを再現することはできません。

コンテキスト:

私のログ (私は LOG4CXX を使用しています) には、次のシーケンスがあります。

thread1_3 の前に thread2_2 をログに記録するにはどうすればよいですか? プログラムがクラッシュすることなく、ヒープの破損によってロックが解除され、2 番目のスレッドがこのロックを取得して、アプリケーションがクラッシュする前にコードを実行できますか?

Windows 7 を使用しています。私の C++ プログラムは、コンパイラの最適化がオンになっているリリース モードになります。

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

c++ - ブーストアップグレードミューテックスを使用してスレッドセーフな実装を実装するためにC++ブーストリストコンテナを拡張するにはどうすればよいですか?

ブーストアップグレードミューテックスを使用してブーストリストコンテナに読み取り/書き込みミューテックスロックを実装する機能を検証するために、いくつかのサンプルテストコードを作成しました。私には10のスレッドがあり、5つはリーダー、5つはライターです。
スマートポインタを使用してメモリ管理を簡素化し、同じオブジェクトを複数のリストに含めることができるようにしました。リーダーが定期的にリストを反復処理している間、ライターは常にオブジェクトを削除してそれぞれのリストに再挿入しています。すべて期待どおりに機能しているように見えますが、リスト消去メンバー関数を呼び出すと、既に持っているときに削除するエントリを見つける必要があります。
消去方法は、エントリを再度検索しなくても消去するエントリを知るのに十分スマートですか、それともリスト要素がわかっているときに検索を削除するように最適化されていますか?検索を行う場合、それを拡張して、リスト要素の検索中ではなく、リストからの実際の削除の周囲にのみ一意のロックを適用できるようにする簡単な方法はありますか?これが私がboost1.51ライブラリとリンクし、vs2008でテストしたコードです。

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

c++ - Boost::thread ミューテックスの問題: ロックしようとすると、アクセス違反が発生します

私は現在、c ++でマルチスレッド化する方法を学んでおり、そのためにboost::threadを使用しています。3 つのスレッドを実行する単純なゲームエンジンに使用しています。

スレッドのうちの 2 つは、基本的にボール、プレート、ボックスなどの PrimitiveObjects と呼ばれるものの内部に格納されている同じ変数の読み取りと書き込みを行っています。

しかし、私は本当にそれを機能させることができません.問題は、2つのスレッドが同時に同じメモリ位置にアクセスしようとしていることだと思います.ミューテックスロックを使用してこれを回避しようとしましたが、今のところ運がありません.これは機能します時々ですが、スパムすると、次の例外が発生します。

これらは、これに使用するオブジェクト内の関数であり、デバッガーもそれらを例外のせいにしています。

これは、各プリミティブ obj を生成するために使用する関数です。(更新しました)

プリントスクリーン

何か案は?編集: 新しい関数(2)、および myMutex はオブジェクトに対してプライベートになりました。プリミティブ オブジェクトの生成に使用する関数を追加しました。

エラー

編集:

これはスタックが指しているコードで、物理スレッド内で実行されています。

その他の関連コード:

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

c++ - boost::bindをboost::mutexを含むクラスと一緒に使用する

私はwatchdirを使用してサーバーで作業しており、内部コレクションにアイテムを追加しています。watchdirは、次のように作成されたスレッドによって定期的に参照されます。

fileFoundCallbackパラメータは、次の方法でも作成されboost::bindます。

ミューテックスを使用した同時アクセスからコレクションを保護したいのですが、クラスがコピーできないため、コピー可能なパラメーターが必要なため、クラスboost::mutexにミューテックスを含めることができないという問題があります。Collectionboost::bind

ここでのミューテックスの役割は、コレクションの変更中にコレクションが読み取られないようにすることであるため、静的ミューテックスのアイデアは意味的に間違っているため、私は好きではありません。

この問題を解決するにはどうすればよいですか?