在linux代码中,我记得听说过围绕mutex_lock()有一个完整的内存屏障。我想确定它是否也在sem_xxx附近。
发布于 2013-05-08 10:29:25
是的,它在无争用的情况下使用原子递增/递减,当然它有一个内存栏。对于争用的情况,有一个对futex的系统调用,它也有一个内存栏。
发布于 2013-05-08 10:51:04
权威的答案是:
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11
应用程序应确保限制多个控制线程(线程或进程)对任何内存位置的访问,以便当另一个控制线程可能正在修改某个内存位置时,任何控制线程都无法读取或修改该内存位置。使用同步线程执行以及相对于其他线程同步存储器的功能来限制这种访问。以下函数相对于其他线程同步内存:...
sem_wait和sem_post都在列表中,所以它们是完全的内存屏障。
https://stackoverflow.com/questions/16431679
复制相似问题