在中断上下文中只能使用自旋锁;在任务睡眠时,只能使用信号量;
自旋锁
自旋锁最多只能被一个执行线程所持有(忙循环--旋转--等待锁重用);
自旋锁不应该被长时间持有;
自旋锁不会导致睡眠,可以在中断处理程序中使用;
读--写自旋锁
一个或多个读任务可以并发的持有读者锁;
对于写锁,最多只能被一个写任务持有;且要等待所有的读锁释放时,才开始进行写任务;
信号量
信号量,是一种睡眠锁;适用于被长时间持有的任务中;
在发生争用时,等待的线程可以投入睡眠,而不是旋转等待;
信号量不会禁止内核抢占;可以允许任意数量的锁持有者(互斥信号量除外);