#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 中文站