写者与读者问题(进程)-操作系统

2023-05-04  本文已影响0人  热血沸腾
102读者与写者1.png

解决方案一 (读者优先)当读者源源不断时,写者就会被饿死,永远没有机会执行写操作。

semaphore rw = 1;//对于共享文件的互斥
int count = 0;//读进程计数
semaphore w=1;//写之间互斥
semaphore mutex=1;//保证对count变量的互斥访问,访问和修改该值的操作应该一气呵成

writer{
    while(1){
        P(rw); 
        写文件;
        V(rw);
    }
}

reader{
    while(1){
        P(mutex);
        if(count==0){
            P(rw);
        }
        count++;
        V(mutex);

        读文件;
        P(mutex);
        count--;
        if(count==0){
            V(rw);
        }
        V(mutex);
    }
}

解决方案二(读写公平法) 借助w 搞一个排队的队列

104读者与写者(读写公平法).png
semaphore rw = 1;//对于共享文件的互斥
int count = 0;//读进程计数
semaphore w=1;//写优先
semaphore mutex=1;//保证对count变量的互斥访问,访问和修改该值的操作应该一气呵成

writer{
    while(1){
        P(w);
        P(rw); 
        写文件;
        V(rw);
        V(w);
    }
}

reader{
    while(1){
        P(w);
        P(mutex);
        if(count==0){
            P(rw);
        }
        count++;
        V(mutex);
        V(w);
        读文件;
        P(mutex);
        count--;
        if(count==0){
            V(rw);
        }
        V(mutex);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读