7

在 linux 代码中,我记得听说 mutex_lock() 周围有一个完整的内存屏障。我想确定它是否也在 sem_xxx 附近。

4

2 回答 2

13

权威答案在这里:

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11

应用程序应确保多个控制线程(线程或进程)对任何内存位置的访问受到限制,这样任何控制线程都不能读取或修改内存位置,而另一个控制线程可能正在修改它。使用同步线程执行以及相对于其他线程同步内存的函数来限制此类访问。以下函数相对于其他线程同步内存: ...

sem_wait并且sem_post在列表中,因此它们是完整的内存屏障。

于 2013-05-08T02:51:03.763 回答
1

是的,它在无争议的情况下使用原子增量/减量,这当然有一个 membar。对于有争议的案例,有一个对 futex 的系统调用,它也有一个 membar。

于 2013-05-08T02:29:25.087 回答