Locked-Free Data Structures筆記

Andrei Alexandrescu 07的文章:http://erdani.com/publications/cuj-2004-10.pdf

03年Maurice Herlihy因爲他91年的文章"Wait-Free Synchronization"被授予Dijkstra分佈式計算獎,將來可能會導致硬件架構進行升級。他證明了要構建wait-free數據結構,哪些原語(primitive)是好的,哪些原語不適合。比如,論文中給出反例,證明test-and-set,swap,fetch-and-add,原子隊列等原語對於合理實現多餘兩個線程間的同步並不充分。而有一些簡單結構足以實現任意數量線程的無鎖算法。

最簡單最常用且具有普適性的原語之一,就是CAS(compare-and-set),這在多數cpu上都有實現。多數32位處理器上可以支持64位的CAS,intel的彙編指令叫CMPXCHG8.

所謂的無等過程(wait-free procedure)是指不管線程多少,一個線程總是可以在有限步數內完成。

無鎖過程(lock-free procedure)是指至少有一個線程在真正執行。

後面實現了WRRM map(Write Rarely Read Many),思路是copy on write。

如果在有gc的環境中,到此就ok了,而如果沒有gc,則需要回收舊的map對象,引入引用計數和更多CAS。最後發現現在update是有鎖操作了,需要等到引用計數是1的情況下才能更新,最好導致讀的併發量也不能太大。

結論是:考慮到內存釋放,無鎖編程會非常tricky。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章