[英]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.