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

c++ - boost::interprocess::mutex を使用して共有メモリ アクセスを同期する

で 2 つの異なるアプリケーションを開発していC++ます。これらのアプリケーションは、 を介して相互に通信しboost::interprocess::shared_memory_objectます。今、私mutexは2つの間で操作を同期するために変数が必要です.誰かがこれの最小限の例を提供できますか. 私のアプリケーションのコードは次のとおりです。

アプリ A:

アプリ B:

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

c++ - ミューテックスを持つクラス オブジェクトを参照によって boost::thread に渡す

いくつかの計算を実行する関数の複数のインスタンスを開始したいと思います。この関数はクラス オブジェクトを受け取り、クラスには が含まshared_mutexれているため、すべてのスレッドが同じオブジェクトを介してクラスにアクセスするように参照渡しします。
boost::threads (1 つでも) を介して関数を開始しようとすると、コンパイル エラーが発生します。

main を介して関数を直接呼び出すと、正常に動作します。関数を複数回実行する方法は? 複数のスレッドがクラスに対して読み取り/書き込みを行うため、ミューテックスはスレッドの安全性のために存在します。分解すると、次のようになります。

関数は次のようになります。

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

c++ - boost::scoped_lock が std::cout をロックしていないように見える

ブースト 1.54.0 と Visual Studio 2010 を使用しています。コードの場合:

約半分の時間で次の結果が得られます (明らかに、スレッド ID と実行順序が異なります)。

...これの代わりに(これは私が期待するものです):

ただし、

...問題なく動作しているようです。

出力は常に同じパターンに従うようです。ミューテックスを間違って使用していますか、それとも std::cout と関係がありますか?

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

c++ - boost::shared_mutex は Linux の粗い std::mutex よりも遅い

std::unordered_map複数のスレッドから非常に読み取り負荷の高いワークロードを受けている があります。同期には astd::mutexを使用できますが、同時読み取りは問題ないはずなので、boost::shared_mutex代わりに a を使用したいと考えました。パフォーマンスの向上をテストするために、最初にマップに一連の値を事前入力してから、一連のスレッドに読み取りテストを実行させます。

によって保護されている粗いロックの実装と、countによって保護されstd::lock_guard<std::mutex>ている共有ロックの実装に対して、これを実行しboost::shared_lock<boost::shared_mutex>ます。

GCC 6.1.1 を搭載した私の Arch Linux x86_64 システムでは、boost::shared_lockバージョンが常に遅くなります! MSVC 2013 を搭載した友人の Windows 10 システムでboost::shared_lockは、常に高速です。 コンパイル可能な完全なコードは github にあります: https://github.com/silverhammermba/sanity

編集

これはプラットフォーム固有の問題のようです。上記を参照。他の誰かがこのコードをビルドして実行し、正の出力 (shared_lock高速) または負の出力 (もちろんミューテックスの方が高速) を見たかどうか、および使用しているプラ​​ットフォームを報告していただければ幸いです。

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

c++ - 複数のスレッドを持つクラス メンバーにアクセスするときにスレッド セーフを保証するにはどうすればよいですか

スレッド同期を機能させようとしています。以下は、説明用のサンプル コード (実行可能な C++ シェルの例) です。プログラムを実行すると、3 つのメンバ関数とbar1()が実行されます。ただし、私の目的は、これらの関数ごとに 1 つのスレッドを使用することです。開発環境でブースト ライブラリにアクセスできます。私はスレッドの使い方を知っており、以下の機能も実装しています。ただし、複数のスレッドが同時に同じメモリにアクセスする可能性があるため、私が理解しているようにスレッドセーフではありません。私の質問は、一度に 1 つのスレッドだけがメンバーにアクセスできるようにするにはどうすればよいかということです。ありがとうございました!bar2()bar3()ThreadedProcess()

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

c++ - 同時に 2 つのミューテックス ロックを保持する

2 つの boost::scoped_locks を同時に保持すると問題が発生するかどうかを知りたいです。ロックは異なるミューテックスをロックしています。次の例を検討してください。

これがデッドロックを引き起こすべきではないことを私は知っています。しかし、他に問題はありますか。これにより、スレッドが長時間スリープ状態になる可能性がありますか?

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

c++ - エラー: 'boost::shared_lock の呼び出しに一致する関数がありません::shared_lock(const Lock&)'

次のような ReadLock を実装しました。

私のmyClass.hで

myClass.cpp で:

コードは VS2010 で動作しますが、GCC4.0 では失敗しました。コンパイラは、一致する関数がないことを示す ReadLock でエラーをスローしています。変数 myLock の「const」の正確性の問題であると思われます。関数宣言の const を外したらエラーが消えました。誰か私にこれを説明できますか?これがWindowsでは機能するのにgccでは機能しないのはなぜですか?

ここに何か提案はありますか?ありがとう。