2011-09-29 174 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)。