九、内核同步介绍
9.1 临界区和竞争条件
所谓临界区就是访问和操作共享数据的代码段。如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序中包含一个bug,这种情况就是竞争条件。
9.2.1 造成并发执行的原因
用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,由于用户进程可能在任何时刻被抢占,而调度程序完全可能选择另一个高优先级的进程到处理器上执行,所以会使得一个程序处于临界区时被非自愿的抢占了。如果重新调度的程序也进入了同一个临界区,就会产生竞争条件。
内核中有类似可能造成并发的原因:
1、中断
2、软中断和tasklet
3、内核抢占
4、睡眠以及与用户空间同步
5、对称多处理
9.3 死锁
避免死锁:按顺序加锁、防止发生饥饿、不要重复请求同一锁、设计力求简单
尽管释放锁的顺和死锁无关,但最好还是以获得锁的反顺序释放锁。