`
aigo
  • 浏览: 2635045 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[C++]std::atomic_flag的初始化问题

阅读更多

如果定义了 std::atomic_flag 类型变量,则初始化必须在定义的时候初始化,不能在构造函数中初始化。

 

如果在构造函数中初始化,则会出现出现下面两种错误

class A
{
private:
	 std::atomic_flag flag;
	 
public:
	 A()
	 {
		flag = ATOMIC_FLAG_INIT;
	 }
}

 错误:

error C2280: 'std::atomic_flag &std::atomic_flag::operator =(const std::atomic_flag &)': attempting to reference a deleted function

 

class A
{
private:
	 std::atomic_flag flag;
	 
public:
	 A() : flag(ATOMIC_FLAG_INIT)
	 {
	 }
}

 错误

error C2280: 'std::atomic_flag::atomic_flag(const std::atomic_flag &)': attempting to reference a deleted function

 

正确的初始化方式是:

class A
{
private:
	 std::atomic_flag flag = ATOMIC_FLAG_INIT;
	 
public:
	 A()
	 {
	 }
}

 

分享到:
评论

相关推荐

    C++ 11 开发中的 Atomic 原子操作.rar_C++11、原子_atomic c++_c++ atomic使用_c++

    总的来说,C++11的`std::atomic`为开发人员提供了强大的工具来处理并发问题,但正确使用它需要深入理解并发编程和内存模型。通过熟练掌握这些知识点,可以编写出更加健壮和高效的多线程C++程序。

    live555 centos 64位修改编译报错

    2. **编译器版本不兼容**:确保系统上的GCC(GNU Compiler Collection)或其他C/C++编译器版本与Live555源代码要求的版本一致。 3. **配置步骤错误**:在运行`configure`脚本时,可能需要指定某些选项来适应CentOS...

    并发无锁奥秘相关代码以及执行程序

    在C++中,可以使用`std::atomic_flag`实现自旋锁。以下是一个简单的自旋锁示例: ```cpp #include <atomic> class SpinLock { public: void lock() { while (flag.test_and_set(std::memory_order_acquire)) {} ...

    atomic_ops原子操作1

    atomic_t 的初始化使用 `ATOMIC_INIT` 宏来实现,例如: ```c static atomic_t my_counter = ATOMIC_INIT(1); ``` 这个初始化操作是原子的,即在 runtime 之前进行初始化,可以保证正确地反映初始化的值。如果在 ...

    深入理解C++11:C++11新特性解析与应用源代码

    1. **自动类型推断(Auto关键字)**:C++11引入了`auto`关键字,允许编译器根据初始化表达式自动推断变量类型,减少了类型声明的冗余,提高了代码可读性。 2. **右值引用(Rvalue References)**:右值引用是一种...

    安全栈表实现,C++11实现,使用atomic特性

    在实际开发中,为了提高性能,还可以考虑使用`std::atomic_flag`来实现自旋锁,或者使用`std::mutex`等同步原语来保护非原子操作的部分。此外,无锁数据结构(如无锁栈)虽然能提供更好的并发性能,但实现起来更为...

    C++17 - The Complete Guide.pdf

    * if和switch语句的初始化器:C++17引入了if和switch语句的初始化器,允许开发者在条件语句中进行初始化。 * constexpr lambda表达式:C++17允许开发者在编译时计算lambda表达式的结果。 * Inline变量:C++17引入了...

    C++ string类的隐式共享写时拷贝实现代码

    2. **构造与赋值**:构造函数需要初始化`std::shared_ptr<char>`,并根据传入的字符串创建字符数组。赋值操作符(`=`)需要考虑右值引用(Rvalue References)和左值引用(Lvalue References),以便在适当的时候...

    C++多线程编程时的数据保护

    C++11提供了几种同步原语,如互斥量(mutex)、条件变量(condition_variable)和原子类型(atomic)。 1. 互斥量(Mutex):互斥量是最基本的同步工具,它保证了在同一时刻只有一个线程可以持有互斥量。在C++11中...

    每天学点C++(C++实例教程:教程+源码)多线程.zip

    C++11引入了线程安全的容器,如`std::atomic`,它们在多线程环境下提供原子操作,保证数据的一致性。 通过学习这个实例教程,你将能掌握C++中的基本多线程编程技术,并了解如何在实际项目中有效地利用多线程提升...

    msvcp140_atomic_wait.dll下载 找不到msvcp140_atomic_wait.dll .zip

    dll控件常规安装方法(仅供参考): 一、如果在运行某软件或编译程序时提示缺少、找不到dll等类似提示,您可将下载来的dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用...

    C++实现线程锁

    在多线程编程中,线程锁是一种同步机制,用于控制对共享资源的访问,以避免数据竞争和其他并发问题。C++标准库提供了一系列的线程同步原语,包括互斥量(mutex)、条件变量(condition_variable)、信号量...

    我们使std :: shared_mutex快10倍

    标题中的“我们使std::shared_mutex快10倍”揭示了一个关于C++多线程并发编程的优化案例,其中std::shared_mutex是C++11引入的一种互斥锁,用于支持读写锁,允许多个读取者同时访问共享资源而只允许一个写入者。...

    atomic_queue:C ++无锁队列

    atomic_queue 基于带有循环缓冲区的C ++ 14多生产者多消费者无锁队列。 这些队列遵循的主要设计原理是极简主义:原子操作的最基本要求,固定大小的缓冲区,值语义。 这些品质也有局限性: 最大队列大小必须在编译...

    无锁 环形缓冲区

    通常,我们会使用C++的`std::atomic`库来实现这些操作,如`std::atomic_fetch_add`和`std::atomic_compare_exchange_weak`等。`std::atomic_fetch_add`用于原子地增加一个值,而`std::atomic_compare_exchange_weak`...

    C++ Concurrency in Action 源码

    - `listing_8.13.cpp` 可能展示了线程安全的容器,如`std::vector`或`std::queue`在并发环境下的正确使用,可能涉及`std::atomic_flag`或`std::lock-free`容器。 6. **线程局部存储** - `listing_7.12.cpp` 可能...

    基于C++11实现的定时器

    C++11引入了许多新特性,如线程库(std::thread)、原子操作(std::atomic)以及更好的时间处理功能,这些都使得实现定时器变得更加便捷。在这个基于C++11的定时器实现中,我们主要会关注以下几个关键知识点: 1. *...

    atomic_ops.pdf

    这个初始化操作是原子的,意味着如果在运行时使用初始化器,为了保证另一个线程能够正确读取用`atomic_read`得到的值,需要在读取之前加上适当的内存屏障(memory barrier)。这里的内存屏障可以是隐式的,也可以是...

    effective modern c++

    15. **成员初始化列表**:在构造函数中使用成员初始化列表以优化对象初始化,防止不必要的拷贝和赋值。 16. **初始化列表和统一分配**:理解如何利用初始化列表和统一分配提升数组和结构体的效率。 17. **`auto`和...

Global site tag (gtag.js) - Google Analytics