Chinaunix

标题: acquire和release语义的理解 [打印本页]

作者: 1210603696    时间: 2014-11-12 19:38
标题: acquire和release语义的理解
我知道在mutex中,lock具有acquire语义且unlock具有release语义,这样能保证两者之间的代码不能reorder,但是我想光是这样并不能保证side effect被其他线程看到,对acquire和release的解释如下:Acquire semantics prevent memory reordering of the read-acquire with any read or write operation which follows it in program order且Release semantics prevent memory reordering of the write-release with any read or write operation which precedes it in program order,这其中并没有cache coherence相关的内容,除非release语义具有刷新store buffer的能力才行吧,但是上面的解释好像只写了memory oreder相关的内容,因此我想问问大家release具有invalidate cache的能力不
作者: folklore    时间: 2014-11-12 19:52
理论上lock和release都应当有invalidate cache的能力,  不然就不Realtime了。
作者: 1210603696    时间: 2014-11-13 07:47
回复 2# folklore
嗯,我也是这么理解的,要不然其他线程在本线程unlock的时候就看不到side effect了。只是我看了很多英文上的acquire和release解释里面并没有说道invalidate cache相关的内容,而是只说了memory ordering我才有此疑惑的


   
作者: windoze    时间: 2014-11-13 11:57
这里用的词是memory,不是cache。
这个memory指的是其它core能看到的memory,core local cache只有自己能看到,order神马的基本没有意义(除非是在指令乱序执行的时候acquire/release可能会导致指令流水线重排)。
对于NUMA体系,其它core能看到的memory不一定是primary memory,假设L1 cache是core local cache,L2 cache是多个位于同一物理CPU上的core shared cache,一个发生在这两个core之间的acquire/release会导致这两个core各自的L1 cache做针对L2 cache的invalidation。
根据thread/core的绑定关系,acquire/release可能是L2/L3 cache invalidate,也可能是直达primary memory的invalidate,总之OS和硬件需要保证memory ordering在这两个thread对应的core之间生效,如果你的thread没有指定core,那只能做一次到primary memory的invalidate。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2