美文网首页
Spinlock:什么是自旋锁

Spinlock:什么是自旋锁

作者: From64KB | 来源:发表于2020-11-18 10:16 被阅读0次

在进一步了解自旋锁之前,先来理解下自旋锁的概念。什么是自旋锁?自旋锁有那些用途?和另一种互斥锁又是什么怎么回事儿?

首先来看一种需要锁控制访问的情况,比如两个线程要更新某个值给内存中的某个变量。如果按照互斥锁的方法就是线程1获得锁,更新变量,这时如果线程2想要获取锁就会进入wait状态,CPU此时就会发生线程切换,执行其他线程的任务。问题是线程1需要占用锁的时间很短,很快啊,啪的一下...(对不起,被马老师的视频洗脑了)很快线程1就释放了锁,那么线程2就需要经过线程切换才能让CPU继续执行代码。这显然是不够高效的,加大了开销。有没有什么好的办法避免这个问题呢?

有,解决问题的点在于线程获取锁的时候如果没有获取锁,不会直接进入wait状态,而是进入一个获取锁的循环,直到获取锁之后再退出循环。这样CPU就会一直执行代码,不会因为线程2处于wait状态而发生线程切换,降低开销。这就会是自旋锁。

那自旋锁这么好为什么还要互斥锁呢?这是因为如果上面那个例子中不是更新内存中的变量而是更新大量数据到本地文件这种非常耗时的操作,需要占用较长时间,这时再用自旋锁就会使CPU长时间执行线程2的循环检查锁代码,其他线程得不到执行而产生线程饥饿Thread Starvation。所以自旋锁适合那些锁占用很短的任务减少线程切换开销,而占用时间较长的任务适合使用互斥锁提高CPU线程执行数防止线程饥饿。总结在下面的表格中:

image.png

对于不知道是什么样类型的任务,采取什么类型的锁好呢?自旋锁+互斥锁。首先是用自旋锁获取一定的次数,如果在该次数内仍未获得锁就使用互斥锁进入wait状态。这样可以平衡自旋锁和互斥锁的优点。

AtomicInteger中通过CAS(compare and swap)方法来保证线程安全,本质也是自旋锁的应用。这里仅对自旋锁的概念做简单介绍,暂时不能提供自旋锁更多深入的理解。

相关文章

  • 关于自旋锁

    自旋锁是什么? spinlock,不断的自旋(自我循环)尝试获得锁。参考文档:Java中的自旋锁 自旋锁的实现 自...

  • Spinlock:什么是自旋锁

    在进一步了解自旋锁之前,先来理解下自旋锁的概念。什么是自旋锁?自旋锁有那些用途?和另一种互斥锁又是什么怎么回事儿?...

  • 认真的讲一讲:自旋锁到底是什么

    什么是自旋锁? 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循...

  • Java并发编程——深入理解自旋锁

    1.什么是自旋锁 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将...

  • Linux内核自旋锁spinlock_t机制

    spinlock用在什么场景? 自旋锁用在临界区代码非常少的情况。 spinlock在使用时有什么注意事项? 临界...

  • iOS atomic

    property 的 atomic 是采用 spinlock_t 也就是俗称的自旋锁实现的. 自旋锁会忙等: 所谓...

  • 互斥锁mutex:一个线程获得资源,其他线程睡眠。 自旋锁spinlock:自旋锁是一种特殊的互斥锁,当资源被枷锁...

  • 自旋锁和互斥锁的区别

    自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并...

  • 自旋锁互斥锁区别

    自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并...

  • mutex与spinlock的区别和应用场景

    这篇讲讲互斥锁(mutex)与自旋锁(spinlock)的差异,以及何种场景应该使用何种锁。mutex是最经常用到...

网友评论

      本文标题:Spinlock:什么是自旋锁

      本文链接:https://www.haomeiwen.com/subject/iunxiktx.html