C++ 高级特性深度解析
1. 原子操作
1.1 原子变量的定义与操作
在 C++ 中,我们可以使用 std::atomic
来定义原子变量。例如:
std::atomic<int> speed (0);
这里定义了一个名为 speed
的原子整数变量。不过要注意,这种初始化方式并非原子操作。若要原子性地增加 speed
的值,可以使用如下代码:
speed += 10;
这样做能避免竞态条件。当多个线程访问同一个变量,且至少有一个线程是写入操作时,就会产生竞态条件。
1.2 原子变量的读写操作
读取原子变量的值时,使用 std::cout
输出:
std::cout << "current speed is: " << speed;
需要注意的是,从 speed
读取值是原子操作,但后续的输出操作(通过 cout
打印)并非原子操作。一般规则是,读写操作是原子的,但周围的操作不是。
1.3 原子操作的基本类型
原子操作的基本类型包括 load <