第5章 并发和竞争情况

并发问题,并发相关的错误是一些最易出现又最难发现的问题。

设备启动程序员现在必须从一开始就将并发作为他们设计的要素。

一、scull中的缺陷

if(!dptr->data[s_pos]) {
    dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL);
    if(!dptr->data[s_pos])
        goto out;
}

假设有2个进程("A"和“B”)独立试图写入同一个schll设备的相同便宜,每个进程同时到达上面片段的第一行的if测试。

因为两个进程都在赋值给同一个位置,显然只有一个能成功。

当然发生的是第2个完成赋值的进程将胜出,进程A先赋值,它的赋值会被进程B覆盖。scull将会完全忘记A分配的内存;只有指向B内存的指针,A所分配的指针,因此,将被对调并且不再返回给系统。

猜你喜欢

转载自www.cnblogs.com/ch122633/p/9204883.html