我正在尝试使用 Maged M. Michael 和 Michael L. Scott 的算法为并发应用程序创建一个非阻塞队列包,如此处所述。
这需要使用"sync/atomic"
包提供的原子 CompareAndSwap。
但是,我不确定与以下伪代码等效的 Go 是什么:
E9: if CAS(&tail.ptr->next, next, <node, next.count+1>)
其中tail
和next
是类型:
type pointer_t struct {
ptr *node_t
count uint
}
并且node
是类型:
type node_t struct {
value interface{}
next pointer_t
}
如果我理解正确,似乎我需要用一个结构(指针和一个uint
)做一个 CAS。这甚至可以通过atomic
-package 实现吗?
感谢帮助!