stdatomic

    0熱度

    1回答

    我有一個線程修改一個原子變量(布爾)和另一個線程想要輪詢該變量。我的應用程序在thread A中幾乎沒有函數調用,並開始對一個特定的原子變量進行輪詢。 Thread B不斷讀取某些外部應用程序(application on dbus)的狀態並相應地修改少量原子變量。 Thread A中的一個函數想要確保如果它返回,那麼一些外部應用程序已經將它的狀態改變爲它將通過這些原子標誌知道的期望狀態。我的應用

    7熱度

    1回答

    boost::shared_mutex或std::shared_mutex(C++ 17)可以用於單個寫入器,多個讀取器訪問。作爲一個教育練習,我將一個使用spinlocking的簡單實現放在一起,並具有其他限制(例如公平性策略),但顯然不打算用於實際應用。 這個想法是,如果沒有線程持有鎖,互斥量會保持爲零的引用計數。如果> 0,則該值表示有權訪問的讀取器的數量。如果-1,一個作家有權訪問。 這是

    1熱度

    1回答

    根據C++標準,std::atomic可與任何可複製類型組合使用。但是,GCC會產生以下錯誤消息: #include <atomic> struct TriviallyCopyableType { int a, b, c, d; }; int main() { std::atomic<TriviallyCopyableType> a; a.store({});

    8熱度

    1回答

    前幾天我寫了類似如下: struct A { std::atomic_bool b = false; }; 在Visual Studio 2015年編譯更新3,其VC++編譯器2015年,無可厚非彈出。 現在我已經重新編譯與海灣合作委員會(5.4.0)同樣的事情在Ubuntu和得到了錯誤: use of deleted function 'std::atomic::atomic(c

    4熱度

    1回答

    how to use std::atomic<> 在上面的問題,很明顯,我們可以只使用std::mutex保持線程安全。我想知道何時使用哪一個。 classs A { std::atomic<int> x; public: A() { x=0; } void Add() { x++; }

    1熱度

    2回答

    我正在使用VC++編譯我的程序(使用Visual Studio 2015,更新3),並且某些代碼段無法編譯。 基本上,我想綁定一個函數,該函數獲取對原子布爾值的引用與原子布爾值。自包含的代碼: void stub(std::atomic_bool& b) { b = true; } int main() { std::atomic_bool b(false);

    0熱度

    2回答

    假設someAtomic是一個具有整體基礎類型的std :: atomic,如atomic_uint16_t。我不想擔任哪種整數類型,然而,在特定的代碼,所以我想要的東西來完成;下面,現在不能編譯: if (newVal > numeric_limits<decltype(someAtomic)>::max()) throw "newVal too large"; else someAtomic

    0熱度

    1回答

    需要一個類,它有一個數組作爲其私有數據成員之一。 class A { vector<atomic<int>> arr; public: A(int size, int init) : arr(vector<atomic<int>>(size,init)) {} // Error: Deleted 'atomic(const atomic&)' (GCC)

    2熱度

    1回答

    考慮一個帶有三個線程A,B,C的程序。 他們有一個共同的全球目標G. 我想用內部克原子變量(i)這是由線程B寫入和讀出由A. 我的做法是: 聲明i的G作爲: std::atomic<int> i; 寫入它從線程B使用指針G作爲: G* pG; //this is available inside A and B pG->i = 23; 而且使用相同的方法從線程A讀取它。 int k =

    1熱度

    1回答

    今天早些時候,我偶然發現了addition on std::atomic<double> not adding up to non-atomic counterpart,原因是std::atomic<double>未被初始化(另請參閱What's the default value for a std::atomic?)。但是,引起我注意的是,我的編譯器沒有警告我關於std::atomic<dou