volatile实例
时间: 2023-08-04 17:12:29 浏览: 44
下面是一个使用volatile关键字的示例:
```c++
#include <iostream>
#include <thread>
// 共享数据
volatile bool flag = false;
void func1()
{
// 修改共享数据
flag = true;
}
void func2()
{
// 执行一些操作
std::cout << "Waiting for flag to become true..." << std::endl;
// 检查共享数据
while (!flag);
// 执行一些操作
std::cout << "Flag has become true!" << std::endl;
}
int main()
{
// 创建两个线程
std::thread t1(func1);
std::thread t2(func2);
// 等待两个线程执行完毕
t1.join();
t2.join();
return 0;
}
```
在这个示例中,我们定义了一个`volatile bool`类型的全局变量`flag`,并将其用于在两个线程之间共享信息。其中,`func1`函数将`flag`设置为`true`,而`func2`函数不断检查`flag`是否为`true`,直到它变为`true`为止。在主函数中,我们创建了两个线程并等待它们完成。
由于我们使用了`volatile`关键字,编译器不会对`flag`进行优化,从而确保了`flag`的可见性和一致性。这意味着,即使`flag`的值在一个线程中发生了改变,另一个线程也能够立即看到这个改变。