Atomic Compare And Swap with struct in Go

Viewed 7495

I am trying to create a non-blocking queue package for concurrent application using the algorithm by Maged M. Michael and Michael L. Scott as described here.

This requires the use of atomic CompareAndSwap which is offered by the "sync/atomic" package.
I am however not sure what the Go-equivalent to the following pseudocode would be:

E9:   if CAS(&tail.ptr->next, next, <node, next.count+1>)

where tail and next is of type:

type pointer_t struct {
    ptr   *node_t
    count uint
}

and node is of type:

type node_t struct {
    value interface{}
    next  pointer_t
}

If I understood it correctly, it seems that I need to do a CAS with a struct (both a pointer and a uint). Is this even possible with the atomic-package?

Thanks for help!

2 Answers
Related