gpt4 book ai didi

c++ - 如果 atomic_flag 变量是类的成员,我该如何初始化它?

转载 作者:可可西里 更新时间:2023-11-01 15:10:38 25 4
gpt4 key购买 nike

我正在尝试使用 atomic_flag 实现自旋锁。我知道使用 C++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();
}

最佳答案

Visual Studio 2012 不支持 c++11 初始化列表 (see the c++11 support page)

但是它在 Visual Studio 2013 中受支持,(请参阅 Uniform Initialization docs 中的“initializer_list 构造函数”部分)

与此同时,在您的情况下,构造函数可以只使用赋值 m_flag = ATOMIC_FLAG_INIT;

更新:它似乎没有测试上面的赋值,但是使用 m_flag.clear(); 达到相同的结果

关于c++ - 如果 atomic_flag 变量是类的成员,我该如何初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com