問題タブ [stdmutex]
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++ - 条件変数を使用せずにミューテックスを使用した 2 つのスレッド間の C++ 同期
別のスレッドで何かが発生するまでブロックする必要があるスレッドが 1 つあります。それは非常に典型的に聞こえますが、私はこの解決策を持っています。
これは Linux では一見問題なく動作し、条件変数は必要ありません。ただし、C++ 標準では、同じスレッドでロックを 2 回取得するのは未定義の動作であるとされていますが、これはスレッド 1 で行います。
c++ - std::mutex をメンバ クラスに導入すると、このコンパイル エラーが発生するのはなぜですか?
以下のコードでclass B
は、メンバー class の配列が含まれていますclass A
。
B::A
には 1 つのメンバーbool
と 1 つのメンバーがありstd::thread
ます。
以下のコードは正常にコンパイルされます。
std::mutex をB::A
導入すると、次のコンパイル エラーが発生するのはなぜですか?
コンパイル エラーを正しく理解していれば、B::A
を明示的に構築しないと のインスタンスを作成できないと不平を言っていますB::A::mutex_
。しかし、これが本当なら、なぜこれが必要なのか理解できませstd::mutex
ん: 以下に示すように、デフォルトのコンストラクターがあるため、コンストラクター引数は必要ありません:
上記のコンパイル エラーの性質と、適切な修正方法を教えてください。
更新: @Jarod42 と @chris は、これがコンパイラのバグであることを発見したようです。誰かがこのバグの性質を説明できるかどうかを尋ねる質問を更新しています.オブジェクト要素のメンバー配列を初期化することは、とても単純で基本的なことのようです. このバグを引き起こすオブジェクトの種類とその理由は? これが普遍的/簡単に再現可能な問題になるとは想像できません...?
更新:あまり良くない回避策はB::A::A
、空のコンストラクターを作成B::A::b_
し、右辺値で初期化することです。:(