操作系统
2017-46
某进程中有3个并发执行的线程thread1、thread2和thread3,其伪代码如下所示。

请添加必要的信号量和 P、V(或 wait()、signal())操作,要求确保线程互斥访问临界资源,并且最大限度地并发执行。
答案
答案
需要三个初值均为 1 的互斥信号量:mutex_y1 用于 thread1 与 thread3 对变量 y 的互斥访问,mutex_y2 用于 thread2 与 thread3 对变量 y 的互斥访问,mutex_z 用于 thread2 与 thread3 对变量 z 的互斥访问。
// thread1
cnum w;
wait(mutex_y1);
w = add(x, y);
signal(mutex_y1);
// thread2
cnum w;
wait(mutex_y2);
wait(mutex_z);
w = add(y, z);
signal(mutex_z);
signal(mutex_y2);
// thread3
cnum w;
w.a = 1;
w.b = 1;
wait(mutex_z);
z = add(z, w);
signal(mutex_z);
wait(mutex_y1);
wait(mutex_y2);
y = add(y, w);
signal(mutex_y1);
signal(mutex_y2);