- 主题:seq_cst 和 acq_rel 区别到底在哪
【 在 zli07 的大作中提到: 】
: 之前写了个缓存实现
: template<typename T>
: struct Cache {
: ...................

--
FROM 61.48.14.*
执行环境究竟是啥呀?不是X86吧
X86 的话一展开,汇编代码是一样的,没想明白为啥呀
【 在 zli07 的大作中提到: 】
: 嗯,实际上clang在armv8上可能只实现了一套,低版本clang通过ldaxr+stlxr+循环实现,高版本直接用STL里的方法
:
--
FROM 111.222.57.*
X86不应该有问题
acquire-release/sequence_consistency 对于原子的exchange,最后产出的汇编都是 xchgq ,这个隐式带了lock,保证了写入的数据 其它核都能看到,都是一样的
【 在 z16166 的大作中提到: 】
: 开了几个线程跑,没发现问题
: template <typename T> struct LocklessCache {
: std::atomic<T *> caches[4];
: ...................
--
FROM 106.11.31.*
读的时候acquire,写的时候release
比方A线程等待标志f变成预期值才往下执行,就要在循环中用acquire语义读取;而B线程负责在某个操作后将f设为预期值,就要用release语义写入
【 在 zli07 的大作中提到: 】
: 之前写了个缓存实现
: template<typename T>
: struct Cache {
: ...................
--
FROM 123.112.18.*
在x86上这两个应该是没区别的
【 在 overcomeunic (功夫茶) 的大作中提到: 】
: 如果是代码中其它地方导致的data race,seq_cst应该也有才对
:
: 但一开始说从acq_rel -> seq_cst 就好了,这是疑惑的点
:
--
FROM 223.66.22.*