1.什么是并发和竟态。
并发:多个执行单元同时执行(执行单元:软中断,硬件中断,多进程...)
竟态:并发的多个单元同时访问共享资源引起竞争的状态
2.竟态形成的条件
1.必须要有并发
2.共享资源(硬件资源,软件上的全局变量等)
3.并发要同时访问共享资源
3.互斥访问
多个执行单元对共享内存进访问的时候,我的作用就是只能够让其中一个执行单元对共享资源的访问,其他的执行单元就会被禁止访问。就好比动物世界里某些的动物的首领一样,只有首领最先能够吃到食物,首领在进食的时候,他的小弟不能同时进食,只有在首领用餐结束的时候在能去进食。
4.临界区
访问共享资源的代码的区域,所以互斥访问就是对这块临界区的访问!就好比上个例子里面的食物。
例: static int open_cnt = 1;
if (--open_cnt != 0)
{
printk ("首领正在进食,还没轮到你呢!\n");
open_cnt ++; //为下一次判断作准备
return -EBUSY; //返回设备忙
}
5.linux内核产生竟态的情形
1.多CPU
2.进程之间的抢占
3.中断和进程
4.中断和中断
优先顺序:硬件中断>软件中断>进程
6.linux内核解决竟态的方法
1.中断屏蔽
2.原子操作
3.自旋锁
4.信号量
阅读(1748) | 评论(0) | 转发(0) |