摘要: 10.1 原子操作10.1.1 原子整数操作typedef struct{ volatile int counter;}atomic_t;10.1.2 64位原子操作10.1.3 原子位操作10.2 自旋锁自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有的自旋锁,那么该线程就会一直进行忙循环等待锁重新可用。要是锁未被争用,请求锁的执行线程便立刻得到它,继续执行。自旋锁不应该被长期持有。还可以让请求线程睡眠,直到锁重新可用时再唤醒他。这样处理器不必循环等待,可以去执行其他代码。这里有两次明显的上下文切换,被阻塞的线程要换出和换入。因此,持有自旋锁的时间最好小于完成两次. 阅读全文
posted @ 2013-04-13 23:22 shuying1234 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 9.1 临界区和竞争条件 所谓临界区就是访问和操作共享数据的代码段。如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序中包含一个bug,这种情况就是竞争条件。9.2.1 造成并发执行的原因 用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,由于用户进程可能在任何时刻被抢占,而调度程序完全可能选择另一个高优先级的进程到处理器上执行,所以会使得一个程序处于临界区时被非自愿的抢占了。如果重新调度的程序也进入了同一个临界区,就会产生竞争条件。内核中有类似可能造成并发的原因:1、中断2、软中断和tasklet3、内核抢占4、睡眠以及与用户空间同步5、对称多处理9.3 死锁避.. 阅读全文
posted @ 2013-04-13 20:17 shuying1234 阅读(136) 评论(0) 推荐(0) 编辑