这是问题所在。 我想要两个进程交替出现,完整的问题就在这里。
Q值。在一个系统中有两个名为A和B的进程。当系统启动时,进程A执行两次,然后进程B执行一次。进程B在进程A执行两次之前无法执行。一旦进程A执行,它就不能再执行,直到进程B执行完毕。上述限制允许过程A和B以下列方式执行。
... AABAABAAB
使用计数信号量为进程A和B写入伪代码以实现所需的同步。
这是我对此的尝试。
解决方案:
流程A
var a=1,b=0,i;
begin
repeat
wait(a);
for(i=0;i<2;i++)
printf("A"); // conidering this is what process a does.
signal(b);
forever
end
流程B
begin
repeat
wait(b);
printf("B"); //considering this is what process B does.
signal(a);
forever
end
这是对的吗?
答案 0 :(得分:1)
另一种解决方案是:
Semaphore as = 1;
Semaphore bs = 0;
A() {
int counter = 0;
while(TRUE) {
if(counter % 2 == 0)
P(as);
print("A"); // and whatever A does
counter++;
if(counter % 2 == 0)
V(bs);
}
}
B() {
P(bs);
print("B"); // and whatever B does
V(as);
}
这个想法是A在每第2个回合等待B(除了第0个回合)。
答案 1 :(得分:0)
我认为一般的想法是正确的,但术语相当奇怪。等待信号对通常用于条件变量(尽管例如POSIX信号量使用post / wait)。
我建议您将wait
替换为semaphore_down
,将signal
替换为semaphore_up
。