問題タブ [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.
c++ - boost::interprocess::mutex を使用して共有メモリ アクセスを同期する
で 2 つの異なるアプリケーションを開発していC++
ます。これらのアプリケーションは、 を介して相互に通信しboost::interprocess::shared_memory_object
ます。今、私mutex
は2つの間で操作を同期するために変数が必要です.誰かがこれの最小限の例を提供できますか. 私のアプリケーションのコードは次のとおりです。
アプリ A:
アプリ B:
c++ - ミューテックスを持つクラス オブジェクトを参照によって boost::thread に渡す
いくつかの計算を実行する関数の複数のインスタンスを開始したいと思います。この関数はクラス オブジェクトを受け取り、クラスには が含まshared_mutex
れているため、すべてのスレッドが同じオブジェクトを介してクラスにアクセスするように参照渡しします。
boost::threads (1 つでも) を介して関数を開始しようとすると、コンパイル エラーが発生します。
main を介して関数を直接呼び出すと、正常に動作します。関数を複数回実行する方法は? 複数のスレッドがクラスに対して読み取り/書き込みを行うため、ミューテックスはスレッドの安全性のために存在します。分解すると、次のようになります。
関数は次のようになります。
c++ - boost::scoped_lock が std::cout をロックしていないように見える
ブースト 1.54.0 と Visual Studio 2010 を使用しています。コードの場合:
約半分の時間で次の結果が得られます (明らかに、スレッド ID と実行順序が異なります)。
...これの代わりに(これは私が期待するものです):
ただし、
...問題なく動作しているようです。
出力は常に同じパターンに従うようです。ミューテックスを間違って使用していますか、それとも std::cout と関係がありますか?
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
高速) または負の出力 (もちろんミューテックスの方が高速) を見たかどうか、および使用しているプラットフォームを報告していただければ幸いです。
c++ - 複数のスレッドを持つクラス メンバーにアクセスするときにスレッド セーフを保証するにはどうすればよいですか
スレッド同期を機能させようとしています。以下は、説明用のサンプル コード (実行可能な C++ シェルの例) です。プログラムを実行すると、3 つのメンバ関数とbar1()
が実行されます。ただし、私の目的は、これらの関数ごとに 1 つのスレッドを使用することです。開発環境でブースト ライブラリにアクセスできます。私はスレッドの使い方を知っており、以下の機能も実装しています。ただし、複数のスレッドが同時に同じメモリにアクセスする可能性があるため、私が理解しているようにスレッドセーフではありません。私の質問は、一度に 1 つのスレッドだけがメンバーにアクセスできるようにするにはどうすればよいかということです。ありがとうございました!bar2()
bar3()
ThreadedProcess()
c++ - 同時に 2 つのミューテックス ロックを保持する
2 つの boost::scoped_locks を同時に保持すると問題が発生するかどうかを知りたいです。ロックは異なるミューテックスをロックしています。次の例を検討してください。
これがデッドロックを引き起こすべきではないことを私は知っています。しかし、他に問題はありますか。これにより、スレッドが長時間スリープ状態になる可能性がありますか?
c++ - エラー: 'boost::shared_lock の呼び出しに一致する関数がありません::shared_lock(const Lock&)'
次のような ReadLock を実装しました。
私のmyClass.hで
myClass.cpp で:
コードは VS2010 で動作しますが、GCC4.0 では失敗しました。コンパイラは、一致する関数がないことを示す ReadLock でエラーをスローしています。変数 myLock の「const」の正確性の問題であると思われます。関数宣言の const を外したらエラーが消えました。誰か私にこれを説明できますか?これがWindowsでは機能するのにgccでは機能しないのはなぜですか?
ここに何か提案はありますか?ありがとう。