我在 golang 中有一个包含二进制数据的字节切片。现在,在该切片中有一个
32 bit
整数充当锁。该切片来自映射内存,因此另一个进程正在访问相同的数据。现在我需要能够原子地 CompareAndSwap
32 bit
值的内容。
示例:
// before:
// slice data [ --- lock value --- ]
// []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ...}
//
// do atomic compare and swap with []byte{0x00, 0x00, 0x00, 0x01} on a given
// index in the original slice.
// after the operation the original slice should contain:
// new data [ --- lock value --- ]
// []byte{0x00, 0x00, 0x00, 0x00 , 0x00, 0x00, 0x00, 0x01 ...}
我查看了
atomic.CompareAndSwapPointer
方法与 unsafe.Pointer
的结合,但我无法让它工作。上述行为在 go 中是否可能?请注意,我需要该操作在其他进程中是原子的。所以不仅仅在当前的 go 进程内。