Standart diyor ki: "Bir tür iş parçacığı :: id öğesi ... bir iş parçacığı temsil etmeyen tüm iş parçacığı nesneleri için tek bir ayrı değer sağlar". Bu operator==
ile ilgili tek/ayrı bir değer mi, yoksa gerçek bitsel tek/ayrı değer mi?std :: thread :: id. Gereksinimleri. Atomize olabilir mi?
Sorunun nedeni: MSVC2012'nin std::thread::id::id()
alanlarından birinde çöp bırakır ve bir std::atomic<std::thread::id>
(sonuncusu bitwise karşılaştırmalara bağlı olduğu için) karşılaştırmasıyla eşleşen bir kod kopyalar.
std::atomic<std::thread::id>
öncelikle yasal bir yapı mıdır?
DÜZENLEME: referans için, kod şöyledir:
while(!worker_id.compare_exchange_weak(no_id = thread_id_type(), self_id))
sleep();
Teşekkür ederim.Seçmeli 'no_id' sıfırlama güzel bir hiledir, şimdi neden görmediğimi merak etmeye başladım :) – vpozdyayev
Ama muhtemelen uyku aramak istersen "no_id! = Std :: thread :: id() " döngüde. – cmeerw
@cmeerw Evet --- sadece vpozdyayev'in döngüsünü olabildiğince yakından kopyalamaya çalışıyordum. Eğer "compare_exchange_weak", "yanlış" başarısız olursa, çoğu durumda siz beklemeden hemen döngü yapmak istersiniz. –