MySQL自旋锁
发布网友
发布时间:2023-01-12 07:23
我来回答
共1个回答
热心网友
时间:2023-10-31 03:10
自旋锁和互斥锁类似,区别在于线程在未获得锁时不去睡眠而是原地等待,直到锁被释放。
自旋锁适合用在耗时较少的逻辑中对共享数据的保护,即线程持有自旋锁的时间很短。
等待的线程发现自旋锁被其他线程持有时,不必挂起自己,稍微等一会儿就好,避免线程状态切换带来的开销。如果不用自旋锁,逻辑耗时很少而线程频繁地睡眠/唤醒,加重线程调度程序的负担。
缺点是:
1、等待自旋锁的线程一直占有CPU, 如果较长时间内不能及时释放自旋锁,会浪费CPU资源。
2、 自旋锁有可能产生死锁。
总之,自旋锁适合于内核可抢占式情况,对于单核非抢占式情形,由于不可抢占,自旋锁的操作是空操作。