Files
bulma/atomic_pointer.go
T

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 修改")
}
}