我正在尝试使用 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 实现吗?
感谢帮助!