事務記憶體


事務記憶體起源於資料庫理論,提供了一種替代程序同步的策略。

記憶體事務是原子性的,是一系列記憶體讀寫操作。如果事務中的所有操作都已完成,則記憶體事務被提交。否則,必須中止並回滾這些操作。可以透過新增到程式語言中的功能獲得事務記憶體的便利性。考慮一個例子。假設我們有一個修改共享資料的函式 update()。傳統上,此函式將使用互斥鎖(或訊號量)編寫,如下所示:

void update (){
   acquire(); /* modify shared data */
   release();
}

但是,使用互斥鎖和訊號量等同步機制會涉及許多潛在的問題,包括死鎖。此外,隨著執行緒數量的增加,傳統的鎖定擴充套件性較差,因為執行緒之間爭奪鎖所有權的競爭級別變得非常高。作為傳統鎖定方法的替代方案,可以向程式語言新增利用事務記憶體的新功能。在我們的示例中,假設我們添加了構造 atomic{S},它確保 S 中的操作作為事務執行。這允許我們如下重寫 update() 函式:

void update (){
   atomic {
      /* modify shared data */
   }
}

使用這種機制而不是鎖的優勢在於,事務記憶體系統(而不是開發人員)負責保證原子性。此外,由於不涉及鎖,因此不可能發生死鎖。此外,事務記憶體系統可以識別 atomic 塊中哪些語句可以併發執行,例如對共享變數的併發讀取訪問。當然,程式設計師可以識別這些情況並使用讀寫鎖,但是隨著應用程式中執行緒數量的增加,此任務變得越來越困難。事務記憶體可以在軟體或硬體中實現。軟體事務記憶體 (STM) 完全在軟體中實現事務記憶體 - 不需要特殊的硬體。它透過在事務塊內插入檢測程式碼來工作。程式碼由編譯器插入,並透過檢查語句可以在哪裡併發執行以及在哪裡需要特定的低階鎖定來管理每個事務。硬體事務記憶體 (HTM) 使用硬體快取層次結構和快取一致性協議來管理和解決涉及駐留在不同處理器快取中的共享資料的衝突。它不需要特殊的程式碼檢測,因此比 STM 的開銷更小。但是,HTM 確實要求修改現有的快取層次結構和快取一致性協議以支援事務記憶體。事務記憶體已經存在數年,但尚未得到廣泛實施。然而,多核系統的增長以及與之相關的對併發和並行程式設計的重視,促使學術界和商業軟體和硬體供應商在這一領域進行了大量的研究。

更新於: 2019年10月11日

717 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告