2011-09-29 120 views
0

这是问题所在。 我希望两个进程交替发生,完整的问题在这里。使用信号量进行同步

问:系统中有两个进程叫做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

我认为一般的想法是正确的,但术语很奇怪。等待信号对通常用于条件变量(尽管例如POSIX信号量使用post/wait)。

我建议你用semaphore_downsignalsemaphore_up取代wait

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); 
} 

的想法是,一种用于B于每第二转弯等待(execept第0)。