小编new*_*man的帖子

如何理解发生 - 在一致之前

JLS的第17章中,它引入了一个概念:发生在一致之前.

如果对于A中的所有读取r,其中W(r)是r看到的写入动作,那么一组动作A发生 - 在一致之前,不是hb(r,W(r))或那里的情况在A中存在写w,使得wv = rv和hb(W(r),w)和hb(w,r)"

在我的理解中,它等于以下几个词:...,既不是......也不是......

所以我的前两个问题是:

  • 我的理解对吗?
  • "wv = rv"是什么意思?

它还给出了一个例子:17.4.5-1

Thread 1 Thread 2

B = 1; A = 2; 

r2 = A; r1 = B; 
Run Code Online (Sandbox Code Playgroud)

在第一个执行顺序中:

1: B = 1;

3: A = 2;

2: r2 = A;  // sees initial write of 0

4: r1 = B;  // sees initial write of 0
Run Code Online (Sandbox Code Playgroud)

订单本身已经告诉我们两个线程交替执行,所以我的第三个问题是:左数是什么意思?

在我的理解中,r2和r1的原因可以看出0的初始写入是A和B都不是volatile字段.所以我的第四个问题是:我的理解是否正确?

在第二个执行顺序中:

1: r2 = A;  // sees write of A = 2

3: r1 = B;  // sees …
Run Code Online (Sandbox Code Playgroud)

java memory-model

11
推荐指数
2
解决办法
4350
查看次数

Java内存模型中具有数据争用的正确同步程序的示例

JLS中,§17.4.5.发生在秩序之前,它说

当且仅当所有顺序一致的执行没有数据争用时,程序才能正确同步.

根据讨论,如果一个正确同步的程序仍允许数据竞争吗?(第一部分),我们得出以下结论:

程序可以正确同步并具有数据竞争.

两个结论的结合意味着它必须存在这样一个例子:

程序的所有顺序一致的执行都是数据竞争的,但是这样的程序的正常执行(除了顺序一致的执行之外的执行)包含数据竞争.

经过深思熟虑,我还是找不到这样的代码样本.那你呢?

java memory-model jls

8
推荐指数
1
解决办法
610
查看次数

什么是"顺序一致的执行没有数据竞争"?

JLS中,§17.4.5.发生在秩序之前,它说

当且仅当所有顺序一致的执行没有数据争用时,程序才能正确同步.

它只给我们定义"顺序一致",它没有给我们定义"顺序一致的执行".只有在知道什么是"顺序一致的执行"之后,我们才可以进一步讨论该主题.

什么是"顺序一致的执行"以及什么是"顺序一致的执行没有数据竞争"?

java memory-model

7
推荐指数
1
解决办法
1226
查看次数

正确同步的程序是否仍允许数据竞争?(第一部分)

JLS有两个结论:

  • C1:如果一个程序没有数据竞争,那么程序的所有执行都将显示为顺序一致: data-race-free => sequentially consistent
  • C2:如果程序正确同步,则程序的所有执行都将显示为顺序一致: correctly synchronized => sequentially consistent

如果C1的反面是真的,那么我们可以得出结论:

  • C3:如果一个程序正确同步,那么它没有数据竞争: correctly synchronized => data-race-free

但不幸的是,JLS中没有这样的陈述,所以我得出了第四个结论:

  • C4:程序可以正确同步并具有数据竞争.

但我对这种方法并不满意,并且想要证明这个结论是正确的(或错误的),即使是以非正式的方式或以样本的方式.

首先,我认为显示包含数据竞争的多线程程序的顺序一致执行的代码段有助于理解和解决此问题.

经过认真考虑,我仍然找不到合适的样品.那么请你给我这样的代码段吗?

java multithreading memory-model

4
推荐指数
1
解决办法
470
查看次数

标签 统计

java ×4

memory-model ×4

jls ×1

multithreading ×1