semaphore S_AC = 0; //控制操作A和C的执行顺序
semaphore S_BC = 0; //控制操作B和C的执行顺序
semaphore S_CD = 0; //控制操作C和D的执行顺序
semaphore S_CE = 0; //控制操作C和E的执行顺序
semaphore S_EF = 0; //控制操作E和F的执行顺序
cobegin
Process T1() {
// process A
完成操作A;
signal(S_AC); // V(S_AC);
// process E
wait(S_CE); // P(S_CE);
完成操作E;
signal(S_EF); // V(S_EF);
// process F
wait(S_EF); // P(S_EF);
完成操作F;
}
Process T2() {
// process B
完成操作B;
signal(S_BC); // V(S_BC);
// process C
wait(S_AC); // P(S_AC);
wait(S_BC); // P(S_BC);
完成操作C;
signal(S_CD); // V(S_CD);
signal(S_CE); // V(S_CE);
// process D
wait(S_CD); // P(S_CD);
完成操作D;
}
coend
上述同步关系可以进行简化,同一个线程中的同步关系可以不用设置信号量,跨线程执行的只有 C 的前置 A 和 E 的前置 C。只需要删除不跨线程的信号量即可,简化后如下:
semaphore S_AC = 0; //控制操作A和C的执行顺序
semaphore S_CE = 0; //控制操作C和E的执行顺序
cobegin
Process T1() {
// process A
完成操作A;
signal(S_AC); // V(S_AC);
// process E
wait(S_CE); // P(S_CE);
完成操作E;
// process F
完成操作F;
}
Process T2() {
// process B
完成操作B;
// process C
wait(S_AC); // P(S_AC);
完成操作C;
signal(S_CE); // V(S_CE);
// process D
完成操作D;
}
coend
登录后提交答案
暂无评论,来抢沙发