Golang中的同步工具原子操作详解

Golang中的同步工具原子操作详解,前面几篇文章介绍了Golang中互斥锁、读写锁、条件变量,虽然它们可以很好地协调对共享资源的访问,但并不能保证原子操作。,原子操作是指一系列操作要么全部执行成功,要么全部执行失败,不会有中间状态。,锁无法保证原子性是因为:,可以看出原子操作的粒度更细,它对单个变量的访问进行了原子化保证,在操作完成之前会阻塞其他并发操作。能够保证原子性执行的只有原子操作,原子操作在执行过程中是不允许被中断的。在计算机底层,原子性是由CPU支持的,所以绝对有效。Golang中的原子操作是基于操作系统和CPU的,具体功能由标准库中的sync/atomic包提供。,sync/atomic包提供的原子操作有Add、Load、Store、Swap和CompareAndSwap,这些函数支持的数据类型有int32、int64、uint32、uint64、uintptr和unsafe包中的Pointer,不过,没有提供针对unsafe.Pointer的Add方法。具体方法如下:,此外,sync/atomic包还提供一个名称为Value的类型,可以被用来存储任意类型的值,结构如下:,使用原子操作可以用于计算需要在多个goroutine之间共享的计数器。例如,计算在线用户数量、任务完成情况等等。,首先声明了一个int64类型的计数器变量counter,使用AddInt64原子操作对其进行递增。通过使用AddInt64,确保了每个goroutine对其值的修改操作都能够安全进行。,再看一个自旋锁的示例:

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/27457.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日