Bir atomic_flag kullanarak bir döndürme kilidi uygulamaya çalışıyorum. C++ 11 ile atomic_flag değişkenini başlatmam gerektiğini biliyorum, ancak derlemeyi başaramıyorum. Benim kod şöyle görünür:) 'önce '{' ': Ben kod derleme yaparkenBir atomic_flag değişkenini bir sınıfın üyesiyse nasıl başlatırım?
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;
};
Ben' eksik sözdizimi hatası' olsun. Ayrıca ATOMIC_FLAG_INIT'in {0} olarak tanımlandığını görüyorum, ancak bunu yazmanın doğru yolu nedir?
Aşağıdakiler derler, ancak hala iş parçacığı güvenli midir?
SpinLock()
{
m_flag.clear();
}
kullandığınız hangi derleyici? Kodunuz iyi bir şekilde derlenmeli. – inf
Bu, MSVC 2013 RC ve RTM'de derlenmez. (Ancak Önizleme'de derlemişti). Http://connect.microsoft.com/VisualStudio/feedback/details/800243/visual-studio-2013-rc-std-atomic-flag-regression adresinden bir bağlantı hatası gönderdim, ancak geri dönüşü duymadım. Bu arada, kodum için std :: atomic'u kullandım ve test_and_set'i exchange (true) ile değiştirdim ve store (false) ile temizle –
Görsel stüdyo kullanıyorum 2012 –