c++ - Thread safe increment of static local variable -
शून्य foo () {स्थिर इंट आईडी = 0; Const int local_id = id ++; // local_id के साथ कुछ करें; }
एकाधिक थ्रेड फू को समानांतर कई बार कॉल कर सकते हैं। मैं चाहता हूं कि foo का उपयोग स्थानीय_आईडी के "अद्वितीय" मान का उपयोग करें क्या यह ऊपर कोड के साथ ठीक है? मुझे आश्चर्य है कि यदि दूसरा थ्रेड स्थानीय_आईडी को आईडी का मान निर्दिष्ट करता है इससे पहले कि पहले धागा से मान बढ़ जाता है। यदि यह सुरक्षित नहीं है, तो क्या इसका कोई मानक समाधान है?
आपका कोड धागा-सुरक्षित नहीं है क्योंकि कई थ्रेड आईडी
एक साथ पढ़ सकते हैं, और local_id
के समान मूल्य का उत्पादन कर सकते हैं।
यदि आप एक धागा-सुरक्षित संस्करण चाहते हैं, तो Std :: atomic_int
, जो C ++ 11 में उपलब्ध है:
void foo () {static std :: atomic_int id; Const int local_id = id ++; // local_id के साथ कुछ करें; }
Comments
Post a Comment