使用信号量进行进程同步

时间:2011-09-29 17:26:53

标签: process operating-system semaphore

这是问题所在。 我想要两个进程交替出现,完整的问题就在这里。

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

这是对的吗?

2 个答案:

答案 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