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

1. 原子操作是什么?
原子操作,操作进行的过程不能被中断。也就是说,某个值在原子操作的过程中,CPU绝不会再去进行其它针对该值的操作。为了实现这样的严谨,原子操作仅会由一个独立的CPU指令代表和完成。

2. Go语言对原子操作的支援
A. sync/atomic包中的函数,可以做的原子操作有,加法(add)、比较和交换(compare and swap,简称CAS)、加载(load)、储存(store)、交换(swap)。
B. 可以操作的数据类型: int32、int64、uint32、uint64、uintptr、以及unsafe包中的Pointer。

3. 传入这些原子操作函数的第一个参数值,对应的都应该是被操作值的指针。
原子操作函数拿到被操作值的指针,才可以定位到储存该值的内存地址。才能通过底层的指令,準确地操作这个内存地址上的数据。

4. 使用原子加法操作的函数,做原子减法。
程式码範例:

package mainimport (  "fmt"  "sync/atomic")func main() {  num1 := uint32(20)  fmt.Printf("The number: %d\n", num1)  num2 := int32(-3)  atomic.AddUint32(&num1, uint32(num2))  fmt.Printf("The number: %d\n", num1)  atomic.AddUint32(&num1, ^uint32(-(-3)-1))  fmt.Printf("The number: %d\n", num1)}

https://play.golang.org/p/-KTsL5WXCCS

说明:
^uint32(-N-1),N为负整数表示的差量。

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

参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
https://golang.org/pkg/cmd/go/internal/test/


关于作者: 网站小编

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

热门文章