【操作系统】睡眠锁与自旋锁异同

睡眠锁与自旋锁异同

概念

1、睡眠锁,即阻塞锁。包括互斥锁、条件变量、读写锁、信号量、屏障;
2、自旋锁,即非阻塞锁,即轮询锁,即忙等锁。一直循环等待锁被释放。

1、都作用于同步机制,保证数据互斥访问;
2、保持数据一致性;

1、实现方式不同
	睡眠锁(被动待通知型),若锁已经被占用后,线程会阻塞,直到该锁被释放。自旋锁(主动轮询型),若锁已经被占用后,线程会一直轮询访问锁,直到锁被释放。
	
2、使用场景不同
	睡眠锁,适用于长时间获取不到锁的场景,因为线程阻塞后,在长时间内不会占用CPU时间片资源。自旋锁,适用于短时间内就可以获取到锁的场景,因为这里如果使用睡眠锁,短时间内状态频繁在运行与阻塞之间切换,会有性能开销问题,
3、实现细节不同
	睡眠锁,需要考虑线程调度与唤醒,需要依赖系统阻塞与唤醒机制。自旋锁仅需要原子操作既可实现

你可能感兴趣的:(操作系统,windows,linux)