標準では、「thread :: id型のオブジェクトは、実行のスレッドを表さないすべてのスレッドオブジェクトに単一の個別の値を提供します」と述べています。それは、に関するoperator==
単一/個別の値ですか、それとも実際のビット単位の単一/個別の値ですか?
質問の理由:MSVC2012std::thread::id::id()
は、そのフィールドの1つにガベージを残し、std::atomic<std::thread::id>
(ビット単位の比較に依存するため)で比較交換を行うコードを壊します。
std::atomic<std::thread::id>
そもそも法的な構成ですか?
編集:参考のために、コードは次のようになります:
while( !worker_id.compare_exchange_weak( no_id = thread_id_type(), self_id ) )
sleep();