标签:
一个数据文件可被多个进程共享,不允许一个写进程和其他的读进程或者写进程同时访问这个资源,因为会引起混乱
semaphore rmutex = 1, wmutex = 1;//读和写的互斥信号量
int readcount = 0;//读的进程为0
void reader() {
do {
wait(rmutex);//拿到读的锁,已经读进程在执行,就自我阻塞
if(readcount == 0) wait(wmuitex);//拿到读的锁,判断是否有写进程在写,有的话就自我阻塞
readcount ++;
signal(rmutex);//归还锁
........
完成读操作
........
wait(rmutex);//开始对readcount的互斥访问,拿到锁
readcount--;
of(readcount == 0) signal(wmutex);//如果readcount == 0,就让写进程进行写操作
signal(rmutex);//归还锁
} while(1)
}
void writer() {
do {
wait(wmutex);//判断是否有有程序在读,如果wmutex<0就阻塞
完成写操作
signal(wmutex);//唤醒读进程或者写进程
}while(1)
}
void main() {
reader();
writer();
}
int RN;//允许RN个读者同时读
semaphore L = RN, mx = 1;
void reader() {
while(1) {
Swait(L, 1, 1);//L>1时,使读进程可以执行
Swait(mx, 1, 0);//开关作用
..........
完成读操作
..........
Ssignal(L, 1);
}
}
void writer() {
while(1) {
Swait(mx, 1, 1; L , RN, 0);//把开关关闭,不允许任何进程访问,L=RN的时候,表示没有进程在读
........
完成写操作
........
Ssignal(mx, 1);
}
}
void main() {
reader();
writer();
}
标签:
原文地址:http://blog.csdn.net/ttf1993/article/details/46288419