自旋锁(spinLock)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自旋锁(spinLock)相关的知识,希望对你有一定的参考价值。
1.AtomicReference AtomicReference类提供了一个可以原子读写的对象引用变量。原子意味着尝试更改AtomicReference的多个线程(例如:比较和交换操作),不会是AtomicReference最终达到不一致的效果。
AtomicReference有一个先进的方法compareAndSet(),它可以将引用和预期值(引用)进行比较,如果它们值相等,则在AtomicReference对象内设置一个新的引用。
2.概述
????????自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断地判断锁是否能够被成功获取,直到获取到锁才会推出循环。
????????获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。
3.自选锁存在的问题
????????1.如果某个线程持有锁的时间过长,就会导致其他等待获取锁的线程进入循环等待,消耗CPU。使用不当会造成CPU使用率极高。
????????2.上面Java实现的自旋锁是不公平的,即无法满足等待时间最长的线程有限获取锁。不公平的锁会存在“线程饥饿”问题。
以上是关于自旋锁(spinLock)的主要内容,如果未能解决你的问题,请参考以下文章
Linux内核源码分析 -- 同步原语 -- 自旋锁 spinlock