我有全局數據。從我的程序中檢索一個非常量元素const C++ - vector
每個程序模塊都必須具有讀取和寫入數據的權限。截至目前,我不使用線程,但Qt的信號和插槽,因此 - 雖然我還沒有遇到崩潰 - 我想我會需要一些時間同步。
因此,每個模塊保持這樣的數據:
const std::vector<T>& data;
其中T是自定義類。因此,每個模塊都可以讀取數據。爲了保持一致,vector
本身是const以禁止同時刪除或刪除。這些都是使用全局函數完成的(如addToData(T elem)
,removeFromData(int id)
),它們可以同步。請注意,矢量本身被聲明爲由引用共享,因此上述全局函數中的更改將導致每個程序模塊中的數據一致。
==>這意味着可以以安全的方式讀取和添加/刪除數據。
我遇到的問題是修改數據。 T
的制定者知道種族條件。使用data
,我想允許調用像data.at(3).setAttr("hello")
,但對於常量向量,在()處只返回常量引用。爲什麼以及如何使其工作?我可以把這個常理化掉,但那感覺不對。
考慮到我的架構,我也樂於提供建議。
我會建議,而不是創建自己的類,它包裝了一個'的std :: VECTOR',提供您所需要的同步訪問。 (並且沒有全局數據) – BoBTFish 2014-10-03 10:59:46
如果修改只與其他修改同步,但不與讀取同步,則會發生數據競爭,即UB。你需要一個讀寫器鎖,或者其他一些更安全的習慣用法。 – Deduplicator 2014-10-03 11:02:59
我想你問的是如何解決'const'元素向量和'const'元素向量之間的模糊線條;不幸的是,C++並沒有這麼簡單。 – 2014-10-03 11:03:31