线程之间的内存栅栏/屏障如何与其他线程中的栅栏/屏障交互?
Posted
技术标签:
【中文标题】线程之间的内存栅栏/屏障如何与其他线程中的栅栏/屏障交互?【英文标题】:How do memory fences/barriers among threads interact with fences/barriers in other threads? 【发布时间】:2021-03-19 12:28:08 【问题描述】:不同线程中内存栅栏的交互是什么?
更具体地说,线程中的内存栅栏是否仅阻止线程内指令的重新排序,或者线程之间存在同步,例如一个线程等待直到另一个线程中达到相应的栅栏?如果多个线程具有相同类型的栅栏并且多个线程具有成对的栅栏,会发生什么情况?什么类型的栅栏需要在线程之间配对,它们是如何使用的?如果带有内存栅栏的代码以单线程方式运行会产生什么影响?
【问题讨论】:
这能回答你的问题吗? Does memory fencing blocks threads in multi-core CPUs? 【参考方案1】:内存屏障与barrier 标签完全不同。
内存屏障仅对本地内核自己对一致共享内存的访问进行排序,因为这就是恢复顺序一致性所需的全部内容。与其他线程/内核没有直接交互。
如果您想要线程之间的同步,请使用释放/获取顺序。 https://preshing.com/20120913/acquire-and-release-semantics/
【讨论】:
以上是关于线程之间的内存栅栏/屏障如何与其他线程中的栅栏/屏障交互?的主要内容,如果未能解决你的问题,请参考以下文章