gpt4 book ai didi

c - linux下C多线程程序如何有效锁定普通变量

转载 作者:行者123 更新时间:2023-11-30 18:36:08 24 4
gpt4 key购买 nike

我在 Linux 中编写 C 语言。通常,我们可以使用mutex在多线程程序中锁定和解锁普通变量(例如 intbool ...)。但我读了一些信息mutex不能有效地。有人推荐使用memory barrier而不是volatile

您可以使用memory-barrier作为示例吗?对于多线程程序中的普通变量来说,有效且准确地与bool变量交换true/false。

感谢您的支持。

最佳答案

互斥锁在锁定访问方面非常出色(假设它是一个合法的互斥锁,使用得当,而不是一些自制的垃圾)。它可能不是最有效的,但它是有效的。

内存屏障通常不够,并且很少应该显式编码(相反,您可以使用 C11 的 stdatomic.h 和适当的内存排序,并让编译器处理根据需要插入障碍)。但原子是一种微优化,当您显然是线程的新手时,您确实不应该进行这种操作。坚持使用简单的互斥体,直到您发现需要更细粒度的控制/速度。

volatile 通常也是垃圾;对于真正的原子来说,它是一个糟糕的解决方案,它在编译器和体系结构中不能一致地工作,但在对原子的良好支持之前就被滥用了,希望它能有所帮助。它有各种各样的陷阱,而且提供的东西很少,而且成本很高。在跨线程同步数据时, volatile 应该是您最后考虑的事情;它用于 DMA 硬件,请勿将其滥用于其他目的。

关于c - linux下C多线程程序如何有效锁定普通变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com