>> * mcs_node >> * +--------+ +----+ +----+ >> * | next | ---> |next| -> ... |next| -> NULL [Main queue] >> * | locked | -+ +----+ +----+ >> * +--------+ | >> * | +---------+ +----+ >> * +-> |mcs::next| -> ... |next| -> NULL [Secondary queue] >> * |cna::tail| -+ +----+ >> * +---------+ | ^ >> * +--------+ >> * >> * N.B. locked = 1 if secondary queue is absent. >> */ I would change mcs_node to cna_node, next to mcs::next and locked to mcs::locked in the very first node. Other than that, this is great. Thanks, Peter and Longman! I should probably stick this graphic in the comment at the top of the file, instead of a comment to find_successor() (or whatever this function ends up being called). — Alex