Weak Memory Concurrency in C/C++11 and LLVM
编译器会对程序进行某种优化
但两种优化合并同时产生是,会发生严重的错误
所以
- C11 禁止 load hoisting,允许CSE
- LLVM 允许 load hoisting,禁止CSE
但WMM仍然有很多问题。。。
The C11 momery model
The OOTA problem
OUT-OF-THIN-AIR,即凭空产生的值,这是我们不想看到的情况
往往是因为产生了数据依赖
A promising solution to OOTA
我们将程序中的write抽象成memory中的message,每条msg都有自己时间戳,对于read,只能读取自己时间戳及后面的值,切读完后需要更新自己所在线程在这个loc的view,write只能write在view之后,且需要更新线程自身的view
在其中,我们允许promise,即可以读取未来必然会写入的值,(其他线程的视角中可以)
8869825596)]
[外链图片转存中…(img-MODhTx9J-1668869825596)]