[英]Is it safe to read global data from multiple threads?
方案如下:
沒有使用互斥鎖,沒有生成線程修改全局類實例。
這個可以嗎?
謝謝
只要你從未寫過那門課,你應該是安全的。
但是,只要您需要進行閱讀或寫作,就需要使用互斥鎖來保護讀寫。
您可能想要研究“可共享鎖”的想法:
Boost具有允許快速讀取的鎖定,但還包括在必要時將鎖升級為“編寫器”的選項。 我認為這可能對未來打樣很有價值。
通常是的,但這不是一個很難保證。
核心問題是你需要一個內存屏障來確保第一個線程將所有數據從寄存器寫回到內存。 但是,當您創建第二個線程時,很可能會發生這種情況。
只要沒有線程正在寫入,讀取全局數據是安全的。
只要保證數據不會同時發生變化,它就是安全的。
我會使用const
資格來確保它。
const std::map<Key,Value> global = ...;
此外,如果您之后沒有修改map
,您應該在Loki::AssocVector
:相同的界面,但更快的只讀用途。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.