मैं एक atomic_flag का उपयोग कर एक स्पिन लॉक को लागू करने की कोशिश कर रहा हूँ। मुझे पता है कि सी ++ 11 के साथ मुझे atomic_flag चर शुरू करना है, लेकिन मैं इसे संकलित करने के लिए नहीं मिल सकता। मेरे कोड इस तरह दिखता है:) 'से पहले' { '':यदि मैं कक्षा के सदस्य हूं तो मैं एक परमाणु_फ्लैग चर कैसे प्रारंभ करूं?
class SpinLock
{
public:
SpinLock()
:m_flag(ATOMIC_FLAG_INIT) /// syntax error : missing ')' before '{'
{
}
void lock()
{
while (m_flag.test_and_set() == true){}
}
void unlock()
{
m_flag.clear();
}
private:
SpinLock &operator=(const SpinLock &);
private:
std::atomic_flag m_flag;
};
जब मैं कोड संकलन मैं 'लापता सिंटेक्स त्रुटि' मिलता है। मैं यह भी देखता हूं कि ATOMIC_FLAG_INIT को {0} के रूप में परिभाषित किया गया है, लेकिन फिर इसे लिखने का सही तरीका क्या है?
निम्नलिखित संकलित करता है, लेकिन क्या यह अभी भी धागे सुरक्षित है?
SpinLock()
{
m_flag.clear();
}
कौन सा संकलक आप उपयोग कर रहे हैं? आपके कोड को ठीक संकलित करना चाहिए। – inf
यह एमएसवीसी 2013 आरसी और आरटीएम में संकलित नहीं है। (हालांकि यह पूर्वावलोकन में संकलित किया गया था)। मैंने http://connect.microsoft.com/VisualStudio/feedback/details/800243/visual-studio-2013-rc-std-atomic-flag-regression पर कनेक्ट बग दायर किया लेकिन वापस नहीं सुना है। इस बीच, मेरे कोड के लिए, मैंने std :: atomic का उपयोग किया है और एक्सचेंज (सत्य) के साथ test_and_set को प्रतिस्थापित किया है और स्टोर (झूठी) –
के साथ साफ़ किया है, मैं विजुअल स्टूडियो 2012 –