上圖顯示的是:有兩個元素,處在靜止狀態的隊列
插入操做在插入新元素(A)以前,先檢查隊列是否處在中間狀態。若是是在中間狀態,那麼確定有其餘線程已經處在元素插入的中途,在步驟(C)和(D)之間。沒必要等候其餘線程完成,當前線程就能夠 「幫助」 它完成操做,把尾指針向前移動(B)。若是有必要,它還會繼續檢查尾指針並向前移動指針,直到隊列處於靜止狀態,這時它就能夠開始本身的插入了。
第一個 CAS(C)可能由於兩個線程競爭訪問隊列當前的最後一個元素而失敗;在這種狀況下,沒有發生修改,失去 CAS 的線程會從新裝入尾指針並再次嘗試。若是第二個 CAS(D)失敗,插入線程不須要重試 —— 由於其餘線程已經在步驟(B)中替它完成了這個操做!
上圖顯示的是:處在插入中間狀態的隊列,在新元素插入以後,尾指針更新以前
上圖顯示的是:在尾指針更新後,隊列從新處在靜止狀態