Атомарное сравнение и обмен со структурой в Go

Я пытаюсь создать неблокирующий пакет очереди -для параллельного приложения, используя алгоритм Магеда М. Майкла и Майкла Л. Скотта, как описано здесь .

Это требует использования атомарного CompareAndSwap, предлагаемого пакетом "sync/atomic".
Однако я не уверен, что Go -эквивалентен следующему псевдокоду:

E9:   if CAS(&tail.ptr->next, next, )

где tailи nextимеют тип:

type pointer_t struct {
    ptr   *node_t
    count uint
}

и nodeимеет тип:

type node_t struct {
    value interface{}
    next  pointer_t
}

Если я правильно понял, кажется, что мне нужно сделать CAS со структурой (и указателем, иuint). Возможно ли это даже сatomic-упаковка?

Спасибо за помощь!

5
задан ANisus 17 July 2012 в 15:03
поделиться