摘要:说明一下同步相关的几个概念
1、临界区:访问和操作共享数据的代码段
2、同步原因:用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,这会造成对临界区的再次访问,这样就会产生竞争。严格意义上
3.造成并发执行的原因:
a.中断:中断可以在任何时刻发僧,打断当前代码,可能会造成对临界区的再次访问b.软中断和tasklet:内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码
c.内核抢占:内核具有抢占性,所以内核中的任务可能会被另一个任务抢占
d.睡眠以及用户空间的同步:在内核空间的进程可能会睡眠,从而引起调度,造成对临近区的再次访问
e.多处理器:多个处理器的时候可以在两个处理器上执行相同的代码。
4.临界区需要考虑的问题:
a.数据是否是全局,其他线程能否访问他?
b.数据会不会在进程上下文和中断上下文中工程?会不会在两个不同的中断处理程序中共享?
c.进程在访问数据时,可不可以被抢占?被调度的新程序会不会访问同一数据?
d.当前进程会不会睡眠或者阻塞,如果是,它会让共享数据处于何种状态?
e.如果这个函数又在另一个处理器上被调度将会发生什么?
5.避免死锁方法:
a.加锁顺序,在嵌套的锁时候必须保证大家都义相同的顺序获得锁
b.防止饥饿发生,不能出现一直等待的状况,超时设定
c.不要重复请求同一个锁
d.越复杂的加锁方法越有可能造成死锁,所以设计应当力求简单
----参考《linux内核设计与实现》