文章目录
写在前面
这是一篇关于Go语言实现商城秒杀的解决方案。
其实商城的秒杀就是高并发问题,那高并发下我们主要解决的就是数据竞争问题
源码:https://github.com/CocaineCong/Go-SecKill
当两个或多个协程同时访问同一个内存地址,并且至少有一个是在写时,就会发生数据竞争。比如A线程修改完之后,线程B读的是线程A之前的值(初始值),所以不知道A是否修改,所以会导致线程B也把自己修改的值放到这个内存地址中,就会导致本次修改无意义。
常用的方法就是加锁了,当这个进程已经执行了,就为该进程进行加锁,防止其他进程对这个数据进行修改,所以这个数据进行修改之后,再释放这个锁。
关于加锁,我们有两种锁机制,悲观锁
和乐观锁
。
- 悲观锁,就是什么时候都保持悲观状态,认为任何地点都会发生这种情况<