我听说在处理互斥锁时,必要的内存屏障由pthread API本身处理。我想了解更多有关此事的细节。
答案 0 :(得分:3)
POSIX规范列出了必须"synchronize memory with respect to other threads"的功能,其中包括pthread_mutex_lock()
和pthread_mutex_unlock()
等功能。
在Appendix A.4.11中,拼写出“同步记忆”的功能:
...必须由高级编译系统识别,以便内存操作和对这些函数的调用不会通过优化重新排序;以及
...可能必须添加内存同步指令,具体取决于特定的计算机。
永远不会明确指出隐含哪种内存同步指令 - 隐式规范是如果你使用一对“同步指令”来确保一个线程中的读取必须在另一个线程中写入之后发生,那么你的程序将正常运行。这包括编译器和架构重新排序效果。