volatile关键字的使用
volatile变量直接在CPU和内存之间交换,不通过一级、二级缓存。
考虑下面的代码:
代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Gadget{public: void Wait() { while (!flag_) { Sleep(1000); // sleeps for 1000 milliseconds } }void Wakeup(){ flag_ = true;}//...private: bool flag_;}; |
上面代码中Gadget::Wait的目的是每过一秒钟去检查一下flag_成员变量,当flag_被另一个线程设为true时,该函数才会返回。至少这是程序作者的意图,然而,这个Wait函数是错误的。
浙公网安备 33010602011771号