高并发,读写十分频繁,会使用CAS
1 互斥锁 自旋锁 原子操作
锁住的代码耗时短:counter++操作,自旋锁有优势
锁住的代码耗时长:for_add操作,自旋锁无优势【因为在等待的时候消耗的CPU资源比较多,做的无用功比较多】
如何选择不同的锁?
共享区域的粒度:线程切换会耗时,如果粒度小,spinlock时间小于CPU线程切换时间损耗,则有优势
mutex 共享区域运行时间比较长(如果获取不到锁,会让出CPU)
spinlock 执行的语句少,非阻塞(获取不到锁,就一直检测)
atomic 简单的数字加减
2. 无锁队列
读写都十分频繁的高并发情况下,可以使用无锁队列。
CAS(compare and swap )