自旋锁顾名思义就是自己在那边打转,就是在不断循环,等待合适的条件然后进入临界区进行操作。
举个例子好解释:
当前存在线程A和线程B,线程A获取到锁之后,那么此时线程B再想获取时,需要等待。假设此时线程之间的竞争不是很激烈,而处理器阻塞一个线程引起的线程上下文之间的切换的代价高于等待资源的情况下,那么线程B可以不放弃CPU的时间片,而是在原地等待,直到获取到锁,进入临界区。
带来的问题:
1.首先就是线程B不去切换了,带来了的问题就是可能长时间占用CPU的时间,如果自旋过多,肯定CPU承受不住,考虑到的解决方案就是增加一个时间判断,如果超过这个时间,就放弃CPU片进行阻塞。
2.死锁问题,自旋的死锁可能出现在哪边?当然是自己调用自己的时候,第一次自旋获取到锁了,然后第二次再执行时发现锁被占了,但是它傻逼的不知道是被自己占了,只能干等。