memory-barriers

    9熱度

    1回答

    有一篇文章:http://lwn.net/Articles/378262/,它描述了Linux內核循環緩衝區實現。我有一些問題: 這裏是「生產者」: spin_lock(&producer_lock); unsigned long head = buffer->head; unsigned long tail = ACCESS_ONCE(buffer->tail); if (CIRC_S

    1熱度

    1回答

    在軟件和硬件內存模型,內存隔離,存儲/加載重新排序等方面已經有很多信息。但是,它似乎都集中在確保讀取和寫入和來自共享內存。 對於這樣一個系統來說,延遲一段時間的線程寫入可能很長時間會是合法行爲嗎? 例如,假設一個線程做一些更新,內存中的數據結構,然後提出了是應該通知更新的其他線程標誌: (dataWritten is initially false) store value1 store va

    0熱度

    3回答

    我使用共享內存區域來獲取som數據到第二個進程。 第一個過程使用CreateFileMapping(INVALID_HANDLE_VALUE, ..., PAGE_READWRITE, ...)和MapViewOfFile(... FILE_MAP_WRITE)。 第二步使用OpenFileMapping(FILE_MAP_WRITE, ...)和MapViewOfFile(... FILE_MA

    6熱度

    2回答

    我有雙核Cortex-A9系統工作,我一直在試圖理解 究竟爲什麼自旋鎖功能,需要使用DMB。這似乎 只要合併存儲緩衝器被刷新鎖定值 應在L1上的解鎖核心和SCU最終應該 要麼無效或更新其他核心的L1值。 這足以維持一致性和安全鎖定權嗎?而且 不會STREX無論如何跳過合併存儲緩衝區,這意味着我們不需要 甚至需要刷新? DMB似乎是一個鈍頭錘,尤其是因爲它 默認爲系統域,這可能意味着一直寫到主存儲器

    3熱度

    2回答

    我想知道在多核ARM芯片上運行Dalvik + JIT是否會對單核芯片造成損失?例如,如果我在我的Android系統中禁用多核支持並使用單個CPU內核執行整個手機,那麼在運行單線程Java基準時性能會更高嗎? 多核多少內存屏障和同步? 我在問,因爲我記得看到單核心手機與雙核手機的單線程基準測試成績。只要Mhz大致相同,這兩款手機之間沒有太大的區別。我原本以爲雙核手機的速度會變慢......

    3熱度

    2回答

    對於使用內存屏障/柵欄進行編程我相當陌生,而且我很想知道如何保證在隨後在其他CPU上運行的工作函數中可以看到設置寫入。例如,考慮以下幾點: int setup, sheep; void SetupSheep(): // Run once CPU 1: setup = 0; ... much later CPU 1: sheep = 9; CPU 1: s

    2熱度

    1回答

    我有下面的C代碼: ... data[index] = something; a_write_memory_barrier(); index = new_index; ... 的代碼不會被鎖定保護(其他人只是閱讀data和index),我要確保data[index]是index更新前存儲。在這段代碼中有內存寫入和其他變量的讀取,但它們並不重要,所以GCC可以自由地對它們進行重新排序(我

    3熱度

    1回答

    我正在使用鏈接列表實現非鎖定FIFO。 FIFO的Enqueue基本上是: void Enqueue(CNode node) { m_tail->m_next = node; // Do I need a memory barrier here? m_tail = node; } 我不知道是否有任何需要添加存儲器屏障,如果它是單線程(即,能編譯器/處理器重

    4熱度

    1回答

    我是Linux內核編程的新手。我很困惑the memory barriers文檔,在保證一章。 在一個特定的CPU中重疊加載和存儲將看起來在該CPU內被排序。 *X = c; d = *X; CPU將只問題: STORE *X = c, d = LOAD *X 然後另一個例子之後: 它必須假定重疊內存訪問可以合併或丟棄。 *A = X; Y = *A; 我們可能會得到之一: STORE

    2熱度

    1回答

    AFAIK有pthread函數充當內存障礙(例如,這裏是clarifications-on-full-memory-barriers-involved-by-pthread-mutexes)。但編譯時障礙,即編譯器(尤其是gcc)是否意識到這一點?換句話說 - 例如, - 是pthread_create()gcc不執行重新排序的原因? 例如代碼: a = 1; pthread_create(..