方案如下:
没有使用互斥锁,没有生成线程修改全局类实例。
这样可以吗?
谢谢
答案 0 :(得分:6)
只要您从未写过该课程,您就应该安全。
但是,只要您需要阅读或写作,就需要使用互斥锁来保护阅读和写作。
您可能希望了解“可共享锁定”的想法:
Boost具有允许快速读取的锁定,但还包括在必要时将锁升级为“编写器”的选项。我认为这可能对未来的证明很有价值。
答案 1 :(得分:2)
通常是的,但这不是一个很难的保证。
核心问题是你需要一个内存屏障来确保第一个线程将所有数据从寄存器写回到内存。但是,当您创建第二个线程时,很可能会发生这种情况。
答案 2 :(得分:1)
只要没有线程正在写入,就可以安全地读取全局数据。
答案 3 :(得分:1)
只要保证数据不会同时发生变异,就可以安全地阅读。
我会使用const
资格来确保它。
const std::map<Key,Value> global = ...;
此外,如果您之后没有修改map
,则应该在Loki::AssocVector
:相同的界面处达到峰值,但对于只读使用会更快。