मानक कहता है: "प्रकार का धागा :: आईडी प्रदान करता है ... सभी थ्रेड ऑब्जेक्ट्स के लिए एक अलग मूल्य जो निष्पादन के धागे का प्रतिनिधित्व नहीं करता है"। क्या यह operator==
के संबंध में एक एकल/विशिष्ट मान है, या यह वास्तविक बिटवाई-सिंगल/विशिष्ट मान है?std :: thread :: id के लिए आवश्यकताएँ। क्या यह परमाणु हो सकता है?
प्रश्न का कारण: MSVC2012 का std::thread::id::id()
अपने खेतों में से एक में कचरा छोड़ देता है, और यह std::atomic<std::thread::id>
पर तुलना-विनिमय की तुलना करता है (क्योंकि बाद में बिटवाई तुलनाओं पर निर्भर करता है)।
std::atomic<std::thread::id>
पहले स्थान पर एक कानूनी निर्माण है?
संपादित करें: संदर्भ के लिए, कोड इस प्रकार है:
while(!worker_id.compare_exchange_weak(no_id = thread_id_type(), self_id))
sleep();
धन्यवाद।'No_id' को चुनिंदा रीसेट करना एक अच्छी चाल है, अब मुझे आश्चर्य है कि मैंने इसे क्यों नहीं देखा :) – vpozdyayev
लेकिन शायद आप केवल नींद को कॉल करना चाहते हैं अगर "no_id! = Std :: thread :: id() " पाश में। – cmeerw
@cmeerw हाँ --- मैं बस जितना संभव हो सके vpozdyayev के लूप को दोहराने की कोशिश कर रहा था। यदि 'compar_exchange_weak'" उग्रतापूर्वक "विफल रहता है तो आप ज्यादातर मामलों में प्रतीक्षा किए बिना तत्काल लूप करना चाहते हैं। –