在linux代码中,我记得听说mutex_lock()周围有一个完整的内存屏障。 我想确定它是否在sem_xxx附近。
是的,它在无争议的情况下使用原子增量/减量,当然这有一个元素。 对于有争议的情况,有一个系统调用futex,它也有一个membar。
权威的答案在这里:
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11
应用程序应确保由多个控制线程(线程或进程)对任何内存位置的访问受到限制,使得在另一个控制线程可能正在修改它时,没有任何控制线程可以读取或修改内存位置。 这种访问是使用同步线程执行的函数来限制的,并且也相对于其他线程同步内存。 以下功能相对于其他线程同步内存:…
sem_wait
和sem_post
在列表中,所以它们是完整的内存障碍。