我有一个连续读取全局变量的线程,并且有另一个线程偶尔更新(写入)全局变量。 什么是最好的方法,成本是多少? 如果我不把锁定在读取端并锁定作者端,是否可能?
谢谢
答案 0 :(得分:0)
此方案不需要任何锁定。当多个线程修改状态或多个线程读取某些状态但您想确保它们读取最新版本或相同版本时,您需要锁定。
答案 1 :(得分:0)
锁可以保护资源/变量,如果读者使用它,编写者也应该这样做。如果全局变量是基本类型,我建议你使用std :: atomic<>来使它成为原子。如果它是一个复杂的类型,就像一个类,你应该使用一个锁来确保你的读者阅读一致的状态。
在您可能期望低争用的情况下,我在自旋锁方面取得了很大成功。但是,如果您的读者阅读率很高,而且您的读者很多。应该使用互斥或原子。