[Golang]同步工具-sync包的原子操作(下)-心智图总结

1. 比较和交换(compare and swap,简称CAS)跟交换(swap)有什么不同?
比较和交换(CAS),是有条件的交换操作,指有在条件满足的情况下才会进行值的交换。而交换,把新值赋给变数,并回传旧值。
在进行CAS操作的时候,函数会先判断操作变数的当前值,是否与我们预期的旧值相等。如果相等,函数就会把新值赋给该变数,并回传true以表明交换操作以进行。否则就忽略交换操作,并回传false。

2. 对一个变数的写操作都是原子操作,比如:加或减法、比较和交换、储存、交换。要对该变数进行读操作的时候,还有必要使用原子操作吗? 有必要。

3. 怎么用 sync/atomic.Value?
A. atomic.Value为开箱即用。atomic.Value的类型属于结构体类型,它只有两个指针方法,Store、Load。
B. 向atomic.Value的变数,储存的第一个值,就决定了它今后只能储存哪一个类型的值。

4. atomic.Value 程式範例

package mainimport (  "fmt"  "sync/atomic")func main() {  var str atomic.Value  tmp_str := "ABCDEFGH"  str.Store(tmp_str)  fmt.Printf("The value load from str is %v.\n", str.Load())  fmt.Println()  //tmp_val := 123  //str.Store(tmp_val) //会引发panic,储存的类型不同}

https://play.golang.org/p/11VVBr5K5NP

5. sync/atomic.Value的类型
type Value struct {
v interface{}
}
func (v *Value) Store(x interface{})
func (v *Value) Load() (x interface{})

http://img2.58codes.com/2024/20131728oopC0N3dfm.png

http://img2.58codes.com/2024/20131728ctjLjFXTLK.png
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
https://golang.org/pkg/cmd/go/internal/test/


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章