建设网站企业排行,外贸网站建设公司案例,海门市规划建设局网站,关于政务网站建设工作情况的总结公平锁和非公平锁
参考#xff1a;https://blog.csdn.net/weixin_39309402/article/details/106466843
公平锁#xff1a;
多个线程排队去获取锁优点 所有线程都能获取到资源 缺点 除第一个线程#xff0c;其他队列中的线程#xff08;阻塞中#xff09;都需要唤醒https://blog.csdn.net/weixin_39309402/article/details/106466843
公平锁
多个线程排队去获取锁优点 所有线程都能获取到资源 缺点 除第一个线程其他队列中的线程阻塞中都需要唤醒开销较大
非公平锁
线程直接插队获取锁获取失败则进入队列等待优点 减少cpu唤醒线程的开销 缺点 可能导致队列中的线程一直获取不到锁活活饿死
go的锁
参考https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-sync-primitives/
正常模式下 新的goroutine、队列中的第一个会参与竞争竞争失败的会加入队列后面 饥饿模式下 触发 有goroutine超过1ms没有获取到锁 互斥锁会将锁交给队列第一个 新的goroutine进入队列末尾 结束 获取到锁的goroutine等待时间小于1ms获取到锁的goroutine处于队尾
参考https://studygolang.com/articles/25556
新的goroutine再看到锁是占用状态时自旋四次没有获取到锁之后加入队列
自旋锁
参考https://cloud.tencent.com/developer/article/1169074
cas锁
参考https://blog.csdn.net/BertonYip/article/details/84397784
参考https://segmentfault.com/a/1190000040042588
硬件汇编指令cmpxchg保证原子性