![](/img/trans.png)
[英]Does synchronisation with ConcurrentHashMap's .compute() guarantee visibility?
在ConcurrentHashMap.compute()中,我遞增和遞減位於共享 memory 中的一些 long 值。 讀取、遞增/遞減僅在同一鍵的compute方法中執行。 因此,通過鎖定 ConcurrentHashMap 段來同步對 long 值的訪問,因此遞增/遞減是原子的。 我的問題是 ...
[英]Does synchronisation with ConcurrentHashMap's .compute() guarantee visibility?
在ConcurrentHashMap.compute()中,我遞增和遞減位於共享 memory 中的一些 long 值。 讀取、遞增/遞減僅在同一鍵的compute方法中執行。 因此,通過鎖定 ConcurrentHashMap 段來同步對 long 值的訪問,因此遞增/遞減是原子的。 我的問題是 ...
[英]Which ARM memory barrier guarantees that one of two threads will observe what the other thread wrote?
線程 A 和 B 正在同時執行。 哪些 ARMv8-A memory 屏障類型(如 DMB、DSB)足以滿足后置條件,為什么? 我查看了ARMv8-A Architecture Reference Manual memory model DMB 和 DSB 的定義,但無法推斷出為什么即使使用 DS ...
[英]Atomic operation propagation/visibility (atomic load vs atomic RMW load)
語境 我正在用 C++ 編寫一個線程安全的原型線程/協程庫,並且我正在使用原子來使任務切換無鎖。 我希望它盡可能高效。 我對原子和無鎖編程有一個大致的了解,但我沒有足夠的專業知識來優化我的代碼。 我做了很多研究,但很難找到我的具體問題的答案:不同內存順序下不同原子操作的傳播延遲/可見性是多少? 當 ...
[英]C++11 atomics. visibility and thread.join() / correct way to stop a thread
對於哪個(如果有?) STORE_ORDER & LOAD_ORDER C++11 保證這段代碼在有限時間內運行? std::atomic<bool> a{false}; std::thread t{[&]{ while(!a.load(LOAD_ORDER)); } ...
[英]Java ConcurrentHashMap.computeIfPresent value modification visibility
假設我有一個帶有集合的並發映射值: 我更新了如下值: 我知道computeIfPresent整個方法調用是以原子方式執行的。 但是,考慮到這個映射是由多個線程同時訪問的,我有點擔心對底層集合所做的修改的數據可見性。 在這種情況下,在調用map.get之后,將在列表中看到值5 ...
[英]If Thread B wishes to see changes Thread A makes, can only the last change be to a volatile variable as opposed to all?
我看過這個答案,它說明了如何: 在新的內存模型下,當線程 A 寫入易失性變量 V,而線程 B 從 V 讀取時,在寫入 V 時 A 可見的任何變量值現在都保證對 B 可見。 因此,舉個例子: 盡管value的非易失性(僅read ),是否保證對value的更改(從 -1 到 1)對線程 ...
[英]Is it thread safe that java anonymous inner-class implements Runnable and shared outer-class object?
如圖所示,創建線程共享主線程狀態對象。我認為它不是線程安全的,由於cpu緩存,主線程和創建線程加載狀態對象到自己的緩存,當創建時 - 線程調用'setStatus'方法它只更新其緩存數據,主線程現在無法看到更新的數據。 所以它需要同步。 我理解正確嗎? ...
[英]Does atomic variables guarantee memory visibility?
關於內存可見性的小問題。 CodeSample1: 此代碼在多線程環境中容易出錯,首先是因為“if-then-act”不是原子的,其次是因為潛在的內存可見性問題,例如threadA將字段設置為true,但是threadB是后來希望讀取該字段的值可能看不到,仍然看到值false。 ...
[英]Does a volatile reference really guarantee that the inner state of the object is visible to other threads?
在閱讀“實踐中的Java並發性”時,我遇到了以下問題- 為了安全地發布對象,必須同時使對該對象的引用和該對象的狀態對其他線程可見。 可以通過以下方式安全地發布正確構造的對象: 從靜態初始化程序初始化對象引用; 將對它的引用存儲到volatile字段或AtomicRefe ...
[英]Visibility Guarantee
我已經閱讀了JCIP 第16.3節“初始化安全性”的一些解釋,但仍然不清楚。 該部分指出 “此外,任何可以通過正確構造的對象的最終字段(例如最終數組的元素或最終字段引用的HashMap的內容)到達的變量也可以保證對其他線程可見。” 所以,如果我有以下可變對象: 然后, 線程 ...
[英]Is volatile needed?
如果我有一個字節隊列,它應該有一個線程生成器,另一個消費者: 這種類型的隊列不需要同步。 readIdx僅由讀者線程修改, writeIdx只由作者線程組成。 readIdx == writeIdx意味着,沒有內容。 並且隊列只能占用buf.length-1字節的數據。 ...
[英]Java Concurrent Collections and visiblity
對於並發集合(例如ConcurrentMap)在集合中數據的可見性方面,我有些不確定。 答:Thread1放置了一個復雜的對象,而Thread2獲取了它。 所有屬性在Thread2中都可見嗎? B:Thread1放置了一個復雜的對象,后來又更改了一些屬性。 然后Thread2得到 ...
[英]Does BackgroundWorker guarantee that memory changes made on the background thread become visible to the main thread?
如果我使用BackgroundWorker修改應用程序中的數據結構,是否可以保證BackgroundWorker完成時(例如,在RunWorkerCompleted事件處理程序中)對主(UI)線程可見的后台線程更改? 對於加分:如果是,保證這一點的機制是什么? ...
[英]Volatile array - memory visibility of the elements
考慮代碼片段 } 問題:操作Object oneTask = localTasksArray[someindex]; 對於對象oneTask的內存可見性安全嗎? 是否有可能oneTask可能出現null或處於其他狀態而不是預期? 我的想法是: thread2可能on ...
[英]Using volatile to ensure visibility of shared (but not concurrent) data in Java
我正在嘗試實現LZ77的快速版本,我有一個問題要問你關於並發編程的問題。 現在我有一個final byte[] buffer和一個final int[] resultHolder ,它們都有相同的長度。 該計划執行以下操作: 主線程寫入所有緩沖區,然后通知線程並等待它們完成。 ...
[英]Visibility in concurrent C++ programs
我知道在Java中,當從另一個線程訪問成員時,不能保證成員的可見性。 意思是訪問線程可能會看到成員的竊取值(因為緩存尚未刷新到主內存)。 我想知道C ++的情況是否也是如此? (也在C ++ 11中?) 如果是這樣,你如何在C ++中解決這個問題? (在Java中,您可以使 ...
[英]Are memory visibility problems per thread also there if there is just one CPU core?
標題可能看起來很奇怪,所以讓我解釋一下。 教導競爭條件的人通常會說thread1可以看到x == 0而線程2已經看到x=1; 我的問題是關於在同一核心上安排的線程(不是不現實的,仍然有一個核心嵌入式系統,並且至少在理論上你可以將線程綁定到核心): 即使thread1和thread2在 ...
[英]Assigning the value of an array variable to itself?
我有這么簡單的代碼。 它輸出了我所期望的: 奇怪的是zzz()的a=a 。 當我拿出它時似乎沒有任何改變。 為什么會這樣? ...
[英]Uninitialized object leaked to another thread despite no code explicitly leaking it?
讓我們看一下這個簡單的Java程序: 主螺紋 主線程創建一個x設置為1的B實例,然后將該實例寫入靜態字段Ab 。 它會永遠重復此操作。 輪詢線程 生成的線程將進行輪詢,直到發現Abx不是1。 ?!? 它有一半的時間像預期的那樣進入了無限循環,但是有一半的時 ...
[英]Why does this Java program terminate despite that apparently it shouldn't (and didn't)?
今天我實驗室的敏感操作完全錯了。 電子顯微鏡上的執行器越過它的邊界,在一系列事件之后,我損失了1200萬美元的設備。 我已將故障模塊中的40K以上線路縮小到: 我得到的一些輸出樣本: 由於這里沒有任何浮點運算,並且我們都知道有符號整數在Java溢出時表現良好,我認為這段代碼沒 ...