Concurrency Algorithms and Theories 06 Promosing

Weak Memory Concurrency in C/C++11 and LLVM

编译器会对程序进行某种优化

Concurrency Algorithms and Theories 06 Promosing_第1张图片

但两种优化合并同时产生是,会发生严重的错误

Concurrency Algorithms and Theories 06 Promosing_第2张图片

所以

  • C11 禁止 load hoisting,允许CSE
  • LLVM 允许 load hoisting,禁止CSE

但WMM仍然有很多问题。。。

The C11 momery model

Concurrency Algorithms and Theories 06 Promosing_第3张图片

The OOTA problem

OUT-OF-THIN-AIR,即凭空产生的值,这是我们不想看到的情况

往往是因为产生了数据依赖

Concurrency Algorithms and Theories 06 Promosing_第4张图片

A promising solution to OOTA

我们将程序中的write抽象成memory中的message,每条msg都有自己时间戳,对于read,只能读取自己时间戳及后面的值,切读完后需要更新自己所在线程在这个loc的view,write只能write在view之后,且需要更新线程自身的view

在其中,我们允许promise,即可以读取未来必然会写入的值,(其他线程的视角中可以)

Concurrency Algorithms and Theories 06 Promosing_第5张图片

Concurrency Algorithms and Theories 06 Promosing_第6张图片
8869825596)]

[外链图片转存中…(img-MODhTx9J-1668869825596)]

你可能感兴趣的:(并发算法,java,c++)