我想爲我的應用程序之一在C++中實現排隊鎖定。 我打算通過算法從以下紙張: http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCUQFjAA&url=http%3A%2F%2Fwww.cs.rice.edu%2F~johnmc%2Fpapers%2Ftocs91.pdf&ei=HpRfUKCZFsfWrQfpgIGACQ&usg=AFQjCNF_QamPWhJrq5dSjJjFjO7W3WzJ5Q&sig2=3TU1vo_aAYbM2fmLxeiZ0A在MCS算法中鎖定
type qnode = record
next : ^qnode
locked : Boolean
type lock = ^qnode
// parameter I, below, points to a qnode record allocated
// (in an enclosing scope) in shared memory locally-accessible
// to the invoking processor
procedure acquire_lock (L : ^lock, I : ^qnode)
I->next := nil
predecessor : ^qnode := fetch_and_store (L, I)
if predecessor != nil // queue was non-empty
I->locked := true
predecessor->next := I ---A
repeat while I->locked // spin ---C
procedure release_lock (L : ^lock, I: ^qnode)
if I->next = nil // no known successor
if compare_and_swap (L, I, nil) // compare_and_swap returns true iff it swapped
return
repeat while I->next = nil // spin --B
I->next->locked := false ---D
甲& B被存取(predecessor->下一個I- &>下一個),並還包含c & d(鎖定變量)相同的變量,但他們在訪問前沒有被鎖定。我在這裏錯過了什麼嗎?