在Linux的代码,我记得听到周围有一个的mutex_lock完全内存屏障()。 我想,以确保无论是周围sem_xxx也。
Answer 1:
是的,它使用在无竞争的情况下,当然具有membar原子增量/减量。 对于主张情况下,有一个系统调用futex的,其中也有一个membar。
Answer 2:
权威答案就在这里:
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11
应用程序应确保通过控制一个以上的线程访问任何存储器位置(线程或进程)被限制为使得没有控制线程能够读取或修改的存储器位置,而控制的另一个线程可以修改它。 这种访问是使用同步线程执行和也相对于其他线程同步存储器的功能的限制。 以下功能相对于其他线程同步记忆:...
sem_wait
和sem_post
是在列表中,所以他们充满记忆的障碍。
文章来源: Is there a full memory barrier around sem_post(sem_t * sem) and sem_wait(sem_t * sem)?