我的多线程代码如下:
线程 A
while(true) {
foo();
sleep();
}
线程 B
...
bar_off();
bar_on();
...
调用 bar_off 直到 bar_on 完成之前,执行 foo() 是不安全的。
我可以重写我的代码如下:
int 易失性 foo_is_safe=0;
线程 A
while(true) {
if (foo_is_safe) {
foo();
}
sleep();
}
线程 B
...
foo_is_safe=0;
bar_off();
bar_on();
foo_is_safe=1;
...
但我相信这不会起作用,因为编译器不需要保留设置 foo_is_safe 和调用 bar_* 函数之间的顺序。我什至不确定编译器不会简单地忽略将 foo_is_safe 设置为 0。
我对么?使我的代码安全的正确方法是什么,即强制 foo_is_safe 在 bar_off() 之前和 bar_on() 之后设置?