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