atomic-swap

    2熱度

    2回答

    OSCompareAndSwap(Mac OS X)等價於CMPXCHG8B嗎?

    17熱度

    2回答

    我想驗證我的理解是正確的。這種事情很棘手,所以我幾乎肯定我錯過了一些東西。我有一個由實時線程和非實時線程組成的程序。我希望非RT線程能夠將指針交換到由RT線程使用的內存。 從文檔,我的理解是,這可以在g++與實現: // global Data *rt_data; Data *swap_data(Data *new_data) { #ifdef __GNUC__ // Atom

    -1熱度

    2回答

    我試圖編譯C++原子的基本示例&線程雖然當我編譯main.cpp文件gcc拋出一些std lib錯誤 - 這似乎無關我的代碼。 的main.cpp #include <thread> #include <atomic> #include <stdio.h> #include "randomdelay.h" using namespace std; atomic<int> flag;

    1熱度

    1回答

    我使用/ SunOS的通過在< SYS提供的原子操作atomic.h中>,這是 void *atomic_cas_ptr(volatile void *target, void *cmp, void *newval); 現在要提出的是可用的,我要檢查舊值是否由該返回函數和被調用函數cmp傳遞的參數是一樣的,如果是的話操作成功。 但我有一定的疑問:因爲這個函數返回一個無效指針到舊值讓我們把它叫做無效

    6熱度

    2回答

    有沒有什麼辦法可以實現一種參考類型的值可以與另一個原子交換? 在Java中,我們有AtomicReference可與局部變量互換,但不與其他AtomicReference。 你可以這樣做: AtomicReference r1 = new AtomicReference("hello"); AtomicReference r2 = new AtomicReference("world");

    1熱度

    1回答

    我有一個大型數據結構正在使用條帶來減少鎖爭用。現在我正在使用系統鎖,但99.99%的時間,鎖是無可爭議的,而且,鎖的時間量相當小。但是,在鎖定期間執行幾個不同的存儲器操作。實際上,與訪問數據結構的總體時間相比,獲得鎖定和釋放鎖定的時間顯着。 因此,我想用以下非常簡單的鎖取代OS鎖。這裏僅顯示嘗試和解鎖,因爲99.99%的時間FastTryLock()將會成功。這裏的「pLock」變量表示條紋結構中

    1熱度

    1回答

    我具有形式 entryID (PK), UserID, entryName 每個用戶(如通過他的用戶ID所定義的)可在該表中創建任意數量的條目中的一個MySQL表,但對於每個用戶, entryName必須是唯一的。我希望允許用戶一次修改所有entryName。因此,我將向用戶展示一個可以編輯多個entryName字段的表單。 問題是,當試圖將其提交給數據庫時。我不能只按行視情況更新行: 1, 1,

    0熱度

    1回答

    根據我的理解,任何原子指令(compare_and_swap,test_and_test,fetch_and_add)都是作爲單個指令執行的。雖然它們涉及多個CPU週期/操作,但它對線程/進程是不可見的。如果線程正在執行任何這樣的原子指令,則不允許其他線程修改/訪問涉及這種原子指令的任何值(存儲器位置/寄存器)。 如果是這樣的話,爲什麼在維基百科http://en.wikipedia.org/wi

    2熱度

    2回答

    我發現了InterlockedExchange函數,它允許我交換兩個簽名的 32位變量(LONG)。 但是,什麼是在Windows下自動交換兩個無符號 32位變量(ULONG)的正確方法? 我沒有看到使用Microsoft提供的功能來做這件事的明顯方法。 (考慮到微軟還告訴我,轉換無符號整數符號整數的結果是在某些情況下implementation-defined)

    3熱度

    1回答

    在更大的一段代碼,我注意到g_atomic_ *在glib函數沒有做什麼我的預期,所以我寫了這個簡單的例子: #include <stdlib.h> #include "glib.h" #include "pthread.h" #include "stdio.h" void *set_foo(void *ptr) { g_atomic_int_set(((int*)ptr),