與鎖的比較
相同點
如果用鎖保護臨界區(qū)低矮,那么同一時刻只會有一個線程在臨界區(qū)內(nèi)寒瓦,其他線程都在臨界區(qū)外面赦肃。lock-free 是所有線程都可以進臨界區(qū)惶楼,但是最后只有一個線程可以繼續(xù)往下執(zhí)行怎茫,其它線程重做一次。所以蝗锥,lock-free 和鎖都只能同時讓一個線程做有用的事跃洛,在性能上不會有質(zhì)的區(qū)別。
不同點
lock-free 和鎖的區(qū)別是面對條件競爭表現(xiàn)不同终议。出現(xiàn)條件競爭時汇竭,有鎖的情況就是線程陷入內(nèi)核,發(fā)生上下文切換穴张,這個是有開銷的细燎。無鎖的情況就是不斷 spin。當(dāng)臨界區(qū)非常小皂甘,只需要一兩條原子指令就可以完成時玻驻,上下文切換開銷占的比重就比較大。此時叮贩,換成 lock-free 性能通常會提高很多击狮。