用户登录可进行刷题及查看答案
semaphore odd = 0, even = 0, empty = N, mutex = 1; P1( ) { x = produce(); //生成一个数 P(empty); //判断缓冲区是否有空单元 P(mutex); //缓冲区是否被占用 Put(); V(mutex); //释放缓冲区 if(x%2 == 0) V(even); //如果是偶数,向P3发出信号 else V(odd); //如果是奇数,向P2发出信号 } P2( ) { P(odd); //收到P1发来的信号,已产生一个奇数 P(mutex); //缓冲区是否被占用 getodd(); V(mutex); //释放缓冲区 V(empty); //向P1发信号,多出一个空单元 countodd(); } P3( ) { P(even); //收到P1发来的信号,已产生一个偶数 P(mutext); //缓冲区是否被占用 geteven(); V(mutex); //释放缓冲区 V(empty); //向P1发信号,多出一个空单元 counteven(); }
登录后提交答案
暂无评论,来抢沙发