ここで説明するように、MagedM.MichaelとMichaelL.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でも可能ですか?
手伝ってくれてありがとう!