- 原子变量
- sync.Mutex(传统方法)">sync.Mutex(传统方法)
- sync下的一个包atomic(原子操作)
- 原子操作详解
原子变量
为了实现同步
sync.Mutex(传统方法)
结果:i = 100
sync下的一个包atomic(原子操作)
- `import "sync/atomic"`
- `var i int32 = 100`
- `atomic.AddInt32(&i, n)`(这是其中的某个方法)
- 内部用的cas(compare and swap)的思想,把现在的值和以前的值比较一下,一样的话就进程操作,不一样就不操作<font style="color:#E8323C;">(以前?后文会告知)</font>
修改上面的实例
结果:i = 100
原子操作详解
atomic提供的原子操作能够确保任一时刻只有一 个goroutine对变量进行操作, 善用atomic能够避免程序中出现大量的锁操作。
atomic常见操作有(5):
- 增减(减就是加负数)
- 载入/读——read/load(保证读的时候没有其他线程在操作)
- 比较并交换cas
- 直接交换
- 存储 write
:::info 实例
:::
发现每一个函数传入的都有指针
- 增减减少
结果 - 读load
结果:100 - 写 load
结果:200 - 比较并交换cas,把值与old值(实例中是old)比较,一致就返回true,不一致返回false
结果:200