![](/img/trans.png)
[英]std::memory_order_relaxed with fetch_add
我正在嘗試更深入地了解輕松的 memory 訂購。 根據 CPP 參考,沒有同步,但原子性仍然得到保證。 在這種情況下,原子性不需要某種形式的同步,例如,下面的fetch_add()如何保證只有一個線程會將值從y更新為y+1 ,特別是如果寫入對於不同線程來說是無序可見的? 是否有與fetch_ad ...
[英]std::memory_order_relaxed with fetch_add
我正在嘗試更深入地了解輕松的 memory 訂購。 根據 CPP 參考,沒有同步,但原子性仍然得到保證。 在這種情況下,原子性不需要某種形式的同步,例如,下面的fetch_add()如何保證只有一個線程會將值從y更新為y+1 ,特別是如果寫入對於不同線程來說是無序可見的? 是否有與fetch_ad ...
[英]Why isn't [[carries_dependency]] the default in C++?
我知道memory_order_consume已被棄用,但我試圖了解原始設計中的邏輯以及[[carries_dependency]]和kill_dependency應該如何工作。 為此,我想要一個特定的代碼示例,它會在 IBM PowerPC 或 DEC alpha 或什至具有假設編譯器的假設架構 ...
[英]Is the value of steady_clock::now from multiple threads consistent with memory order?
在一個線程中, steady_clock::now()保證返回單調遞增的值。 這如何與多線程觀察到的 memory 排序和讀取交互? 這是重要的一點: 這些斷言會失敗嗎? 或者我對獲取發布 memory 訂單有誤解嗎? 以下主要是對我的代碼示例的解釋和闡述。 線程t1寫入原子arg 。 它還分別記 ...
[英]Cheaper alternative to std::atomic<bool>?
我在多線程應用程序中有一類對象,其中每個線程都可以將對象標記為刪除,然后中央垃圾收集器線程實際刪除該對象。 線程通過訪問內部 bool 的成員方法進行通信: 過去,由於 Thread Sanitizer 一直在抱怨,因此其他人已將 bool 設為原子。 但是, perf 現在表明在內部原子負載期 ...
[英]Are relaxed atomic store reordered themselves before the release? (similar with load /acquire)
我在en.cppreference.com 規范中閱讀了對原子的放寬操作: “[...]只保證原子性和修改順序的一致性。” 所以,我在問自己,當您處理相同或不同的原子變量時,這種“修改順序”是否有效。 在我的代碼中,我有一個原子樹,其中一個低優先級、基於事件的消息線程使用memory_order ...
[英]A Minimum Ordering Requirement
令x和y是std::atomic<int>類型的兩個不同變量,並假設它們的當前值為1 。 什么是最寬松的排序要求,以便以下代碼生成一些輸出? (即,什么應該被用於order1 ... order4 ?) ...
[英]Atomic operations on a single variable
以下 C++ 代碼片段中變量x可能的最終結果是什么? (請根據 C++ 標准允許的內容而不是當前在不同平台上可用的內容進行回答) 理想情況下,我希望x最后為零。 即使我使用的是std::memory_order_relaxed ,也是這種情況嗎? 編輯:為了使問題更精確,是否保證 1)在線程 ...
[英]Example of misuse of std::memory_order::relaxed in C++ Standard [algorithms.parallel.exec/5 in n4713]
在 C++ 標准中濫用std::memory_order::relaxed的例子之一: 然后它說, 上面的例子取決於迭代的執行順序,如果兩個迭代在同一個執行線程上按順序執行,則不會終止。 問題: 評論說,“不正確:假定執行順序”。 什么是“假定的執行順序”? 我想念它。 “上面的例子取決於迭代的執 ...
[英]Will fetch_add with relaxed memory order return unique values?
想象一下N個線程運行遵循簡單的代碼: 其中num是: 是否完全可以安全地假設,運行代碼的每個線程的res將是不同的,或者對於某些線程可能是相同的? ...
[英]std::atomic_bool for cancellation flag: is std::memory_order_relaxed the correct memory order?
我有一個從套接字讀取並生成數據的線程。 在每次操作之后,線程檢查std::atomic_bool標志以查看它是否必須提前退出。 為了取消操作,我將取消標志設置為true ,然后在工作線程對象上調用join() 。 線程代碼和取消函數看起來像這樣: std::memory_o ...
[英]C++ countdown in CyclicBarrier going wrong using atomic variables [solutions without locks please]
我正在嘗試從頭開始在C ++中實現循環屏障。 目的是實現與Java實現盡可能一致的方法。 類參考在這里。 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html 現在,在我的測 ...
[英]is std::atomic::fetch_add a serializing operation on x86-64?
考慮以下代碼: 是否有X86-64指令(比如小於5歲的架構),這將允許跨otherStuff 1和2被重新排序fetch_add或者是將要始終序列化? 編輯: 看起來這總結為“ lock add在 x86 上lock add了內存屏障?” 似乎不是,雖然我不確定在哪里可以找到參考。 ...
[英]Does calling `into_inner()` on an atomic take into account all the relaxed writes?
into_inner()是否返回此示例程序中的所有輕松寫入? 如果是這樣,哪個概念保證了這個? ( https://play.rust-lang.org/?gist=96f49f8eb31a6788b970cf20ec94f800&version=stable ) 我知道 ...
[英]C++ standard: can relaxed atomic stores be lifted above a mutex lock?
標准中是否有任何措辭可以保證原子的寬松存儲不會超過互斥鎖的鎖定? 如果沒有,是否有任何措辭明確表示編譯器或 CPU 這樣做是 kosher 的? 例如,以下面的程序為例(它可能對foo_has_been_set使用 acq/rel 並避免鎖定,和/或使foo本身成為原子。它是為了說明這個問題而編寫 ...
[英]Is it possible that a store with memory_order_relaxed never reaches other threads?
假設我有一個線程A寫入一個atomic_int x = 0; , 使用x.store(1, std::memory_order_relaxed); . 如果沒有任何其他同步方法,使用x.load(std::memory_order_relaxed);其他線程需要多長時間才能看到這一點x.load ...
[英]Understanding memory_order_relaxed
我試圖了解memory_order_relaxed的細節。 我指的是這個鏈接: CPP參考 。 問題1:在上面的代碼中,fun2在技術上是否可能處於無限循環中,即使設置ptr的線程已經完成運行,它也會將ptr的值視為nullptr? 如果假設,我將上面的代碼改為: 相關問 ...
[英]Does C++11 guarantee memory ordering between a release fence and a consume operation?
考慮以下代碼: C++ 是否對線程 a 中的柵欄與線程 b 中的消耗操作的交互做出任何保證? 我知道在這個例子中,我可以用 store-release 替換柵欄 + 原子存儲並讓它工作。 但我的問題是關於這個使用圍欄的特殊情況。 閱讀標准文本我可以找到關於釋放柵欄與獲取柵欄的交互以及釋放柵 ...
[英]How can memory_order_relaxed work for incrementing atomic reference counts in smart pointers?
考慮以下摘自 Herb Sutter 關於原子的演講的代碼片段: smart_ptr 類包含一個名為 control_block_ptr 的 pimpl 對象,其中包含引用計數refs 。 Herb Sutter 說線程 A 中refs的增量可以使用 memory_order_relaxe ...
[英]Does atomic_thread_fence(memory_order_seq_cst) have the semantics of a full memory barrier?
完整/通用內存屏障是指在屏障之前指定的所有 LOAD 和 STORE 操作將出現在屏障之后指定的所有 LOAD 和 STORE 操作之前,相對於系統的其他組件。 根據cppreference , memory_order_seq_cst等於memory_order_acq_rel加上如此標記的所有 ...
[英]Lock-free stack - Is this a correct usage of c++11 relaxed atomics? Can it be proven?
我為一個非常簡單的數據寫了一個容器,需要跨線程同步。 我想要最好的表現。 我不想使用鎖。 我想用“放松”的原子。 部分是為了一點額外的魅力,部分是為了真正理解它們。 我一直在研究這個問題,而且我正處於這個代碼通過我拋出的所有測試的地步。 但這並不是“證據”,所以我想知道是否有 ...