操作系统层面有哪些锁
互斥锁
- 互斥锁在同一时刻只允许一个线程或进程访问共享资源,其他线程或进程需要等待锁的释放。
同步锁
- 两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据
互斥与同步的区别
互斥锁是通过竞争对资源的独占使用,彼此之间不需要知道对方的存在,执行顺序是一个乱序;
同步锁是协调多个相互关联线程合作完成任务,彼此之间知道对方存在,执行顺序往往是有序的
自旋锁
- 自旋锁是一种忙等待的锁,当共享资源被占用时,线程或进程不会睡眠等待,而是一直循环检查锁的状态,直到锁被释放。
自旋锁适用于锁的持有时间很短且线程间同步频繁的场景,但如果锁的持有时间较长,会浪费大量的CPU资源。
读写锁
- 读写锁允许多个线程或进程同时读取共享资源,但对于写操作,必须独占访问。
- 这种锁适用于读取操作远远多于写入操作的场景,能够提高程序的并发性能。
读写自旋锁:
- 读写自旋锁是读写锁和自旋锁的结合,能够在读取操作频繁且竞争不激烈的情况下,提高程序的并发性能。
条件变量
- 条件变量用于等待某个条件成立后才能访问共享资源。
死锁:
- 死锁并不是一种锁类型,而是一种系统状态,指的是两个或两个以上的线程或进程相互等待对方释放资源,从而导致都无法继续执行的情况。