并发:多个执行单元同时并行执行,并发的执行单元对资源的调用具有竞态关系
竞态的解决一般采用互斥的机制,访问共享资源的代码区域称为临界区。临界区需要以某种互斥机制来保护,中断操作、原子操作、信号量和自旋锁设备驱动可以采用的互斥途径
自旋锁: 自旋锁首先是锁,即获取所有权上锁,执行完成解锁。其他未获取所有权的任务会进行等待直到获取到资源
信号量:这是一种睡眠锁,如果一个任务尝试获取已经被持有的信号量,信号量将任务推入等待队列,进行睡眠,信号量被释放,等待队列的任务被唤醒
自旋锁对信号量的比较:
需求场合 建议的加锁方法
低开销加锁 优先使用自旋锁
短期锁定 优先使用自旋锁
长期加锁 优先使用信号量
中断上下文中加锁 使用自旋锁
持有锁是需要睡眠、调度 使用信号量
死锁四个必备条件:
1、互斥
2、不可抢占
3、循环等待
4、占用并等待