标签:
读者优先:
伪代码描述:
//R: 信号量, 初值为1 , 用于同步读者之间
//mutx: 信号量, 初值为1, 用于互斥读者与写者, 或者写者与写者
//rc: 用于统计当前有多少读者进程
void reader() { while (TRUE) { P(R); rc = rc + 1; if (rc == 1) P(mutex); V(R); 读操作 P(R); rc = rc - 1; if (rc == 0) V(mutex); V(R); 其他操作 } } void writer() { while (TRUE) { P(mutex); 写操作 V(mutex); } }
写者优先(这个是我自己想出来的, 不是标准答案, 望指出错误):
伪代码描述:
//mutex 信号量: 初值为1, 控制对临界区的访问 //W 信号量: 初值为1 , 用于写者之间同步 //R 信号量: 初值为1 , 用于读者之间同步 //RW 信号量: 初值为1, 用于读者与写者之间同步 //rcount 初值为0 : 用于统计当前有多少读者 //wcount 初值为0 : 用于统计当前有多少写者 void reader() { while(true) { P(RW) ; P(R) ; rcount++ ; if(rcount == 1) P(mutex) ; V(R) ; V(RW) ; 读操作 P(R) ; rcount-- ; if(rcount == 0) V(mutex) ; V(R) ; } } void writer() { while(true) { P(W) ; wcount++ ; if(wcount == 1) P(RW) ; V(W) ; P(mutex) 写操作 V(mutex) P(W) ; wcount-- ; if(wcount == 0) V(RW) ; V(W) ; } }
标签:
原文地址:http://www.cnblogs.com/iamzhoug37/p/5400505.html