多线程锁

死锁(deadlock)

活锁(livelock)

饥饿(hungry)

优先级反转(Priority inversion)

优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。
高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止。
而低优先级获得的CPU时间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源,
则该中优先级的任务反而超过这两个任务而获得CPU时间。
如果高优先级等待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,
因为此时低优先级进程无法与高优先级进程争夺CPU时间,从而无法执行,进而无法释放资源,

护航现象(Lock Convoys)

假设线程A获取到了锁,这时发生了线程调度中断,它的时间片用完了,
于是,系统调度器交给下一个线程执行,不妨设线程B获得了执行权。
由于此锁被线程A获取,所以,当线程B执行到获取锁的操作时,虽然时间片未用完,但不得不放弃执行权
如此继续,所有同等优先级且要竞争此锁的线程都被阻塞。调度器再次回到线程A,很快地线程A释放了锁。
在操作系统中,释放一个锁,意味着内核中如果有线程正在等待该锁,则它的状态就可以变成运行态。
比如,线程B的获取操作成功。但此时,内核只是将线程B标记为锁的所有者,而线程A继续执行。
很快地,线程A又要获取锁了,由于该锁已经被标记给线程B了,所以线程A不得不放弃时间片,
将控制权交给调度器。调度器终于可以捡起线程B,将处理器的执行权交给它。等到线程B释放了锁,
下一个线程获得锁的所有权,并且等到线程B放弃执行权或者结束时间片之后就有机会被执行。
此过程一直持续,经过一轮之后又会回到线程A,从而继续下一轮的争抢。
在此期间,这些线程总是未执行满时间片就不得不放弃执行权。

引起调度粒度变小, 造成调度器的时间分配不公平

你可能感兴趣的:(多线程)