30 lines
641 B
Go
30 lines
641 B
Go
// bulma/atomic_pointer.go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sync/atomic"
|
|
)
|
|
|
|
type Node struct {
|
|
Value int
|
|
Next *Node
|
|
}
|
|
|
|
func main() {
|
|
var head atomic.Pointer[Node]
|
|
head.Store(&Node{Value: 10})
|
|
|
|
// 原子替换头节点
|
|
old := head.Swap(&Node{Value: 20})
|
|
fmt.Printf("✅ 旧头节点值: %d\n", old.Value)
|
|
fmt.Printf("✅ 新头节点值: %d\n", head.Load().Value)
|
|
|
|
// CAS 安全更新(仅当当前值为预期时才更新)
|
|
if head.CompareAndSwap(&Node{Value: 20}, &Node{Value: 30}) {
|
|
fmt.Println("✅ CAS 成功:头节点更新为 30")
|
|
} else {
|
|
fmt.Println("❌ CAS 失败:头节点已被其他 goroutine 修改")
|
|
}
|
|
}
|