Concurrency Algorithms and Theories 06 Promosing

本文探讨了C/C++11标准下的内存模型及其对并发编程的影响,特别是弱内存模型下的优化问题。文章对比了C11与LLVM编译器在load hoisting与CSE优化方面的不同策略,并提出了一种解决OUT-OF-THIN-AIR问题的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

image-20221025205237408

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

所以

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

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

The C11 momery model

image-20221025210140196

The OOTA problem

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

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

image-20221025210416137

A promising solution to OOTA

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

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

image-20221025210920704

image-20221025210944247
8869825596)]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值