C++中的原子操作是指在多线程编程中,对共享内存变量的读写操作是不可分割的、不可中断的操作,这样可以避免数据竞争导致的不一致问题。C++11中新增了<atomic>头文件来支持原子操作,在这个头文件中提供了一些原子操作对象和函数,如std::atomic<T>、std::atomic_load、std::atomic_store等。
以std::atomic<T>为例,它可以像普通变量一样定义、初始化和赋值,但是对它的读写操作必须使用特殊形式的原子操作函数或操作符,如std::atomic_load、std::atomic_store、std::atomic_exchange、std::atomic_compare_exchange等。这些函数和操作符可以保证在多线程环境下对共享变量的读写操作是原子的。例如:
std::atomic<int> count(0); // 原子变量的定义和初始化 count++; // 非法操作,不是原子操作 std::atomic_fetch_add(&count, 1); // 合法操作,是原子操作
需要注意的是,使用原子操作并不能完全避免数据竞争,因为一个变量的读写操作虽然是原子的,但如果多个线程同时对这个变量进行读写操作,仍然可能会导致数据竞争问题。因此,正确使用互斥量和条件变量也是解决多线程问题的常用手段。