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。