仅使用volatile检查并行完成

时间:2016-12-02 20:26:22

标签: java concurrency volatile

考虑这些共享标志,表明完成了两个不同的任务:

volatile boolean completed1 = false;
volatile boolean completed2 = false;

现在考虑两个线程:

没有。 1:

completed1 = true;
if (completed1 && completed2) continueSomeOtherStuff();

没有。 2:

completed2 = true;
if (completed1 && completed2) continueSomeOtherStuff();

continueSomeOtherStuff()至少可以被可靠地调用一次吗?

更新

http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf发生在的定义中找到它:

  • 线程中的每个操作都发生在该线程中的每个后续操作之前。
  • 监视器上的解锁发生在该监视器上的每次后续锁定之前。
  • 对易失性字段的写入发生在每次后续读取该易失性之前。

在最后一句中没有提到线程关系,所以我认为它在所有线程中都是有效的。

0 个答案:

没有答案