通过并行线程互斥参与全内存屏障澄清(clarifications on full memory ba

2019-06-25 10:40发布

我听说有互斥体打交道时,必要的内存屏障由并行线程API本身处理。 我想对这个问题的更多细节。

  1. 难道这些claimings真实的,至少在各地最常见的架构?
  2. 该编译器识别这种隐性障碍,并避免了操作的重新排序/生成的代码时,从本地寄存器读取?
  3. 当应用存储​​器屏障:成功地获取互斥后并将其释放后?

Answer 1:

POSIX规范列出了必须功能的“相对于其他线程同步存储器” ,其包括类似功能pthread_mutex_lock()pthread_mutex_unlock()

在附录A.4.11它明确地表明了函数“同步记忆”:

  • ......必须由先进的编译系统的认可,这样的内存操作和调用这些函数没有被优化重新排序; 和

  • ...将潜在地必须具有存储器同步指令加入,这取决于特定的机器上。

这是从来没有明确规定是隐含了什么样的内存同步指令 - 隐含的规范是,如果你使用一对“同步指令”,以确保在一个线程读取必须在其他,那么你的程序写入数据后发生会正确操作。 这包括编译器和建筑重新排序的效果。



文章来源: clarifications on full memory barriers involved by pthread mutexes