簡體   English   中英

C ++已經是靜態成員變量的安全性

[英]C++ thready safety of a static member variable

例如,我有這個類:

class Example
{
public: 
    static int m_test;
}

我有線程A和B都使用這個靜態成員變量。 這個成員變量線程在集線器下的某個地方安全嗎?

我認為它不是,因為它是靜態分配的,因此兩個線程都將訪問相同的內存位置,可能導​​致沖突。 這是正確的還是有一些隱藏機制使這個靜態成員線程安全?

不存在線程安全,因為沒有內置機制可以避免數據爭用。

static std::atomic<int> m_test; 會是的。

請注意,你也有thread_local作為存儲持續時間 - 在這個例子中沒有使用 - 但如果你有這個而不是static那么每個線程都會獲得自己的m_test

如果兩個線程都只讀取該變量,則是安全的。 如果至少有一個更新它,那么它就是數據競爭 - >未定義的行為。

隱藏機制是原子操作。 例如,通過在C ++ 11中創建std::atomic<int>類型的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM