九、内核同步介绍

9.1 临界区和竞争条件

  所谓临界区就是访问和操作共享数据的代码段。如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序中包含一个bug,这种情况就是竞争条件。

9.2.1 造成并发执行的原因

  用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,由于用户进程可能在任何时刻被抢占,而调度程序完全可能选择另一个高优先级的进程到处理器上执行,所以会使得一个程序处于临界区时被非自愿的抢占了。如果重新调度的程序也进入了同一个临界区,就会产生竞争条件。

内核中有类似可能造成并发的原因:

1、中断

2、软中断和tasklet

3、内核抢占

4、睡眠以及与用户空间同步

5、对称多处理

9.3 死锁

避免死锁:按顺序加锁、防止发生饥饿、不要重复请求同一锁、设计力求简单

尽管释放锁的顺和死锁无关,但最好还是以获得锁的反顺序释放锁。

 

posted @ 2013-04-13 20:17  shuying1234  阅读(136)  评论(0编辑  收藏  举报