1

我的多线程代码如下:

线程 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() 之后设置?

4

0 回答 0