请问x86内存模型相较于纯acquire-release语义具体强在哪?有哪些额外重排序约束?
x86内存模型相对于纯acquire-release的额外重排序约束
x86采用的是**Total Store Order(TSO,总存储序)**内存模型,它的语义确实比标准的acquire-release模型更严格,具体额外的重排序约束如下:
- 禁止任意Load→Load重排序:不管是普通加载还是带有acquire语义的加载,x86 CPU都不会将它们的执行顺序颠倒。而在纯acquire-release模型里,无同步语义的普通Load之间,编译器或CPU是允许重排序的,只要单线程逻辑不受影响。
- 禁止任意Store→Store重排序:所有存储操作(包括普通Store和带release语义的Store)在x86上都会严格按照程序顺序执行,全局视角下所有CPU看到的Store顺序是一致的。但纯acquire-release模型中,没有release语义的普通Store之间,是允许被重排序的。
- 禁止Load→Store重排序:x86中,先执行的Load操作绝不会被放到后续的Store操作之后执行。而纯acquire-release模型里,普通Load和非release的Store之间,不存在这种强制约束,重排序是被允许的。
另外,x86的TSO还保证了对同一地址的Store操作具有全局总序:所有CPU观察到的对同一地址的写入顺序完全一致,这也是纯acquire-release模型没有的特性——后者仅通过release-acquire对建立局部同步关系,无法保证无同步的Store操作有全局统一的顺序。
内容的提问来源于stack exchange,提问作者ledonter
相关产品推荐
相关产品推荐

