繁体   English   中英

sem_post(sem_t * sem)和sem_wait(sem_t * sem)周围是否存在完整的内存屏障?

[英]Is there a full memory barrier around sem_post(sem_t * sem) and sem_wait(sem_t * sem)?

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

权威答案在这里:

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

应用程序应确保限制一个以上控制线程(线程或进程)对任何内存位置的访问,以使任何控制线程都无法读取或修改一个内存位置,而另一个控制线程可以对其进行修改。 使用同步线程执行并相对于其他线程同步内存的函数来限制此类访问。 以下功能使内存相对于其他线程同步:...

sem_waitsem_post在列表中,因此它们是完整的内存屏障。

是的,在无竞争的情况下,它使用原子递增/递减,这当然有一个小数。 对于有争议的情况,有一个对futex的系统调用,它也有一个成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM