#include <iostream>
#include <thread>
#include <atomic>
volatile bool flag = false;
void set_flag() {
// 设置标志位,表示某个操作已经完成
flag = true;
}
void check_flag() {
// 检查标志位,直到其变为true
while (!flag) {
// 由于flag是volatile,编译器不会对其进行优化,
// 每次都会从内存中读取最新的值
}
std::cout << "Flag is set!" << std::endl;
}
int main() {
std::thread t1(set_flag);
std::thread t2(check_flag);
t1.join();
t2.join();
return 0;
}
volatile
关键字的作用:
volatile
告诉编译器该变量可能会在任何时刻被改变(例如通过硬件中断、其他线程等),因此编译器不能对该变量进行优化,每次访问时都必须从内存中读取最新值。代码逻辑:
flag
是一个 volatile
类型的布尔变量。set_flag
函数会将 flag
设置为 true
,而 check_flag
函数会在一个循环中不断检查 flag
的值,直到它变为 true
。flag
是 volatile
,编译器不会对这个变量的读取进行优化,确保每次都能读取到最新的值。多线程环境:
volatile
来避免编译器优化导致的问题。然而,需要注意的是,volatile
并不提供原子操作或同步机制。如果需要更严格的同步控制,应该使用 C++11 提供的 std::atomic
或者互斥锁等同步原语。上一篇:freopen c++用法
下一篇:c++数字转字符串
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站