compare-and-swap

    0熱度

    1回答

    我一直在do-while循環中使用atomicCAS來在我的第一個並行程序中需要時執行各種算術運算。我發現有其他操作,例如atomicInc,這與atomicCAS在do-while中的增量是一樣的,是正確的?這會更有效率(在時鐘週期方面),還是沒有任何意義從我過度使用atomicCAS?

    -1熱度

    1回答

    我有一個快速問題:我知道這兩個片段的複雜性是相同的。然而,我想知道哪一個比較好,爲什麼?這是選擇排序代碼: 這是我寫的: for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j <= n - 1; j++) { if (a[j] < a[i]) {

    1熱度

    1回答

    我試圖編寫CUDA版本的serial代碼作爲在分子動力學算法中實現週期性邊界條件的一部分。這個想法是,有一小部分位置在框外的粒子需要使用兩個ways中的一個來重新使用,並限制我使用第一種方式的次數。 本質上,它歸結爲以下MWE。我有一個數組x[N],其中N很大,並且代碼如下serial。 #include <cstdlib> int main() { int N =30000;

    3熱度

    2回答

    今天我在接受採訪時被問到下一個問題:「如果您在具有不支持CAS操作的處理器的計算機上調用它,AtomicLong中的compareAndSet方法會發生什麼? 」。 能否請你幫我解決這個問題,並提供一些鏈接到一個全面的描述,如果可能的話?

    0熱度

    1回答

    是否有可能在shared_ptr的atomic_compare_exchange_strong中與原始指針進行比較? 像這樣: struct Chunk{ // atomics std::shared_ptr<Chunk> prev; std::shared_ptr<Chunk> next; }; // chunk is guarantee

    0熱度

    1回答

    我有一個需求,我需要在完成時發佈'n'個線程的結果。爲了檢查所有線程是否完成,我使用AtomicInteger(incrementAndGet())並將其值與最終變量進行比較。在做檢查之前,我正在將單個線程的結果寫入共享對象(併發哈希表,因爲非同步數據結構dint似乎足夠了)。所以,我的問題是,在我的計數器通過'if'條件之前,所有線程是否會完整寫入共享對象(並且主線程是否能夠看到一致的內存)?

    0熱度

    1回答

    因此,獲取和添加操作的共識數是2 我很難理解這意味着什麼以及它如何影響多線程編程?我會喜歡一些關於如何影響比較和比較的實際例子...非常感謝。

    0熱度

    1回答

    我有這種情況,我有一個狀態變量; INT狀態=(2,1,0) 和無限循環: ret = BoolCompareAndSwap(state, 1, 2) if (ret) { // Change something ... state = 0; } 這會狀態設置是原子? 假設設置一個變量,你必須: 從內存 變化值 設置新的價值 取出如果其他線程來比較變量,它會是原子的,因

    1熱度

    2回答

    // created a copy of CNode and added the new value CNode *copyCNode = new CNode; //memcpy(c, iNode->mainNode->cNode, sizeof(*(iNode->mainNode->cNode))); memcpy(copyCNode, iNode->mainNod

    0熱度

    1回答

    我有以下函數updateEntry它將值寫入查找表。我想創建這個函數的多線程版本。 我正在研究原子操作__sync_bool_compare_and_swap,但我不知道如何在這裏正確應用它。 是否理論上可以在沒有鎖定的情況下自動實現此功能,因爲它會更改兩個獨立的存儲位置entryLookup[id]和entry? void updateEntry(Entry ** entryLookup, un