cost 342 ms
在 GNU C 內聯匯編中輸入操作數 `"m"(var)` 和 Output 操作數 `"=m"(var)`? 在沒有說明的情況下用作障礙?

[英]Input Operand `"m"(var)` and Output Operand `"=m"(var)` in GNU C inline asm? Used with no instructions as barriers?

我想知道asm中的輸入操作數"m"(var)和 output 操作數"=m"(var)是做什么的: 我在 SPMC 隊列中遇到了上面 的兩行。 副作用是什么? 上面的行沒有 asm 指令,所以我相信作者試圖利用一些明確定義的副作用(例如,如果write_idx和blk的值在第二行,它們會被寄存器刷 ...

以下為可重入鎖編寫的代碼是否容易受到指令重新排序錯誤的影響?

[英]Could the following code written for a Reentrant Lock be susceptible to an instruction reordering error?

我最近在學習無鎖並發中的可重入鎖時遇到了以下代碼: 但是,我不確定釋放柵欄調用是否不排除在它之前的線程中進行后續 memory 操作的可能性,以及獲取柵欄是否排除在它之后進行更早的 memory 操作的可能性。 如果他們不這樣做,從技術上講,優化可能會導致這條線嗎? 在調用之前在同一線程上完成並成 ...

如何在沒有鎖定的情況下在特定時間獲得穩定版本的多個值?

[英]How to get a stable version of mutiple values at a particular time without lock?

我正在閱讀 ConcurrentQueue 的源代碼,這里有一些代碼: GetHeadTailPositions() 可能想要在特定時間獲取 4 個變量,但是,在“where”循環中有 4 個比較,考慮以下序列: 然后我們得到這些變量的不穩定版本。 這個方法穩定嗎? 如何在沒有鎖定的情況下在特定 ...

C++ 中沒有分配的字符串的共享 memory SPSC 隊列

[英]Shared memory SPSC queue for strings without allocations in C++

賞金將在 7 小時后到期。 此問題的答案有資格獲得+50聲望賞金。 madhur4127想提請更多人注意這個問題: 這是一個小眾問題,所以是的,這值得賞金我正在尋找類似於由boost::lockfree::spsc_queue和boost::interprocess提供的 SHM(共享內存)SP ...

獲取/發布最新操作的可見性

[英]Acquire/Release Visibility of Latest Operation

賞金將在 5 天后到期。 此問題的答案有資格獲得+50聲望賞金。 Yam Marcovic正在從可靠的來源尋找答案: C++ 標准或 CppReference 的摘錄在這里清楚地得出了可靠的結論,如果可能的話要簡明扼要。 這個主題有很多微妙之處,需要篩選的信息也很多。 我找不到專門解決這個問題 ...

當你在沒有保護的情況下從多個線程讀寫一個 object 會發生什么?

[英]What happens when you read and write an object from multiple threads without protection?

我了解到從不同的線程訪問相同的 Object 不是線程安全的,應該受到保護。 通過鎖定或“Interlocked.Exchange”或不可變或任何其他方式。 這意味着以下代碼可能不是線程安全的,因為它不保護對共享“測試”object 的訪問。 我的問題是: 以下代碼是否安全? 如果不是,可能發生的 ...

多個生產者消費者的並發數據結構,其中每個消費者讀取每個數據

[英]Concurrent data structure for multiple producer consumer where every consumer reads each datum

我需要為以下場景構建數據結構。 有多個生產者,他們需要向消費者發送數據。 有多個消費者,他們需要從生產者那里接收數據到目前為止,這是非常典型的mpmc隊列用例。 但是,我還有一個限制。 每個消費者都必須能夠讀取生產者發送的所有數據。 當然,某些消費者必須能夠讀取第二個或第三個元素,而其他消費者讀取第 ...

無鎖迭代/索引鋸齒狀 arrays

[英]Lock free iterating / indexing jagged arrays

對於加速數據結構上的並行工作,我目前使用SpinLock ,但想設計無鎖算法。 數據結構是一個鋸齒狀數組,其中每個內部數組都有不同的大小。 工作線程應該獲取內部數組中的下一個元素,增加索引,如果索引更大,則切換到外部數組中的下一個索引: 除了增加共享索引然后總結 arrays 的長度之外,我想不出 ...

在具有運行時大小的 boost 托管共享 memory 中創建 boost::spsc 隊列

[英]Create boost::spsc queue in boost managed shared memory with a runtime size

共享內存 IPC 同步(無鎖) 我的用例與上述問題中的描述非常接近。 但我想進一步使用用戶定義的運行時大小動態創建 spsc 隊列。 我嘗試使用以下代碼實現它: 但這會引發編譯錯誤: 我可以理解它與分配器問題有關,但由於我對分配器的了解有限,我似乎無法解決它。 我該如何實施? ...

當核心數量很大時,無鎖算法是否傾向於優於鎖定算法?

[英]Do lock-free algorithms tend to outperform locking ones when the number of cores is large?

AFAIU 有一個普遍的想法,即無鎖代碼通常比鎖定代碼具有更高的開銷。 雖然,似乎也有一種想法,即無鎖算法在爭用下更具可擴展性。 如果有 2 個內核和 2 個線程爭用諸如std::queue (+ mutex) 與boost::lockfree::queue (MPMC 無鎖隊列) 之類的東西, ...

從多個線程更新的 volatile 變量 C++

[英]volatile variable updated from multiple threads C++

如果線程 2 首先在時間 t 更新 b,然后線程 3 在時間 t+5 更新 b: thread1 在讀取 b 時會“及時”看到最新值嗎? 例如:從 t+delta 到 t+5+delta 的讀取應該是 true,在 t+5+delta 之后讀取應該是 false。 delta 是線程 2 或 ...

在 SPMC 隊列中混合 memory 排序 memory_order_seq_cst 和 memory_order_relaxed?

[英]Mixing memory ordering memory_order_seq_cst and memory_order_relaxed in a SPMC queue?

我正在為單個生產者、多個消費者實現一個面向塊的共享環形緩沖區。 緩沖區跟蹤當前迭代(即換行計數)和最后寫入的塊索引。 寫入時,生產者首先將塊的迭代字段標記為臟,填充其他字段(偏移量/大小/等),然后將迭代字段標記為非臟,與整個緩沖區的迭代次數相同。 之后,它會適當地增加最后寫入的塊索引。 讀取時, ...

我應該使用哪個集合從多個線程中讀取元素並定期完全覆蓋集合?

[英]Which collection should I use it to read elements from multiple threads and full overwrite collection periodically?

我將使用一個靜態集合,它將被核心進程用於讀取,並由后台服務每 X 分鍾完全更新一次。 后台進程將每 X 分鍾從數據庫加載更新的數據,並將接收到的數據集設置到這個靜態集合中。 核心進程將接收許多任務來檢查此集合中是否存在某些值。 每個任務將在一個單獨的線程中處理。 會有很多請求,它應該非常快,所以 ...

無鎖的定義

[英]The definition of lock-free

存在三種不同類型的“無鎖”算法。 Concurrency in Action中給出的定義是: 無阻塞:如果所有其他線程都暫停,那么任何給定線程都將在有限步內完成其操作。 無鎖:如果多個線程正在對一個數據結構進行操作,那么經過一定數量的步驟后,其中一個線程將完成其操作。 Wait-F ...

提升原子引用計數示例是否包含錯誤?

[英]Does boost atomic reference counting example contain a bug?

我指的是這個例子。 作者使用memory_order_release來遞減計數器。 他們甚至在討論部分state 中指出使用memory_order_acq_rel會過度。 但是理論上以下情況不會導致x永遠不會被刪除嗎? 我們在不同的 CPU 上有兩個線程他們每個人都擁有一個共享指針的實例,兩個指 ...

真正的無鎖 MPMC 環形緩沖區? 線程可以互相協助避免阻塞嗎?

[英]Truly Lock-free MPMC Ring Buffer? Threads able to assist each other to avoid blocking?

這個問題的靈感來自Lock-free Progress Guarantees 。 所示代碼並非嚴格無鎖。 每當寫入線程在隊列不為空或未滿時掛起,讀取線程就會返回 false,從而阻止整個數據結構取得進展。 真正無鎖環形緩沖區的正確行為應該是什么? 通常,真正的無鎖算法涉及一個階段,在該階段中,被搶 ...

讀取原子修改的值是否需要 memory 屏障?

[英]Is a memory barrier required to read a value that is atomically modified?

鑒於以下情況: 讀取m_value是否需要 memory 屏障? 我的理解是_InterlockedIncrement將生成一個完整的 memory 屏障,並確保在任何后續加載發生之前存儲該值。 所以從這方面來看這聽起來很安全,但是, m_value可以緩存,即GetValue()是否可以返回一個 ...


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