問題タブ [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++ - ブースト: ファンクターでのスレッド化とミューテックス
ブーストを使用して、C++ のスレッドとミューテックスで簡単なことを試しています。
これはコードです:
コンパイル時に、次のエラーが発生します。
エラーは、ファンクターのスレッドを作成しようとしたときにのみ発生します。それをまっすぐに実行するとうまくいきます。さらに、ミューテックスとロックへのすべての参照を削除すると、正常に動作します。
E: 間違ったエラー ログがありました。おっと。
c++ - この「safe_read」呼び出しに相当するブーストはありますか
私はスレッディングを強化するのは初めてです(おそらく私を台無しにしたWin32スレッディングから来ました)。
そのため、作業ループがまだ進行していることを確認するための、より「RAII」な方法を作成しようとしています。だから私はこの単純な関数を作りました:
いつも使っているようなので、これに相当するブーストはありますか?また、これは許容できる呼び出しですか?
アイデアは、より奇妙なロックを使用せずにこれを安全に実行できるようにすることです。
c++ - マップの 1 つのライター、複数のリーダーの問題
データ コレクションの同期に問題があるようです。この特定のクラスには、次のようなデータ コレクション、ミューテックス、および条件変数があります。
ほとんどの場合、これでうまくいきます。ただし、最近、基本的にコレクション内の各値に新しい値を割り当てる関数を追加しました。コレクションには約 100 ~ 200 の値があるため、それほど多くはありません。すべての割り当ては非常に迅速に行われます。また、このステップでは計算が行われないようにしました。これは単なる一連の割り当てです。割り当てを囲むと、次のようなコードがあります(stackoverflowの回答に基づいています):
コードの他の場所には、コレクションから情報を「読み取る」関数があり、次のようになります。
何が起こっているかというと、「書き込み」関数が呼び出されると、しばらくデッドロックしているように見えます。最終的には抜け出すので完全なデッドロックにはなりませんが、待ち時間が長時間(数秒)になる場合があります。これは、ミリ秒以下のオーダーである必要があります。
奇妙な部分は、以前に上記のライター関数を正常に使用したことがあり、複数のスレッドがこのデータ コレクションに問題なく書き込んでいたことです。この変更を行った理由は、このコレクションの更新を他のスレッドの実行時の状態に依存させるのではなく、1 か所に集中させるためです。
c++ - ロック可能なコンテナの DLL インターフェースから Boost::mutex を隠す
私は DLL プロジェクトで Boost を使用してきましたが、Boost の依存関係をまだエクスポートしていません。C 型と DLL ソース ツリー自体から派生したものだけです。
しかし今、私はロック可能なデータ モデルに苦労しています... 設計された例外セーフを取得できず、ブースト型を DLL インターフェイスに直接エクスポートしません。
そしてそれを使用します:
少なくとも、おそらくある種のDllTestData::Pimplを設計し、Dll からミューテックス タイプを隠すことができます。しかし、次のように使用したい場合:
これを書いている間、私はILockable -Interface について考え始め、PImpl などでミューテックス型を非表示にしているので、次のようになります。
そして、次のように使用します。
これは有効なアプローチでしょうか (pimpl でミューテックス タイプを非表示にし、Lockable インターフェイスで動作します)、またはこれで間違った方向に進んでいますか? または、このシナリオでは何がうまくいくでしょうか? たぶん、boost::mutex PImpl 全体をインターフェイスに移動しますか?
c++ - ミューテックスとスレッドの独立性
32 コアのコンピューターで次のプログラムを実行します。
- 行 24、26、および 32 がコメントされているため、完了するまでに 9 秒かかります。
- 24 行目と 26 行目だけがコメントされ、32 行がコメント解除されているため、完了するまでに 9 秒かかります。
- コメントがない場合、完了するまでに 18 秒かかります
2 つのスレッドは独立しており、オンラインでロックされているかどうかは問題ではないと思いましたa.foo()
。しかし、そうです、なぜですか?