2012-05-16 26 views
1

我需要兩個子進程來做到這一點:同步交替兩個過程在Linux下C

  • 子進程1應該printf甚至在0到100
  • 子進程之間的數字2應在0之間printf奇數和100

我應該在執行後終端看到的是:0 1 2 4..100

哪有我這樣做?

我想這個程序,但它不能正常工作,它只是給我的第一個整數0:

#include <unistd.h> 
#include <stdio.h> 
#include <signal.h> 

void handler1(int sig) 
{ 
    if(sig == SIGCONT) 
    { 
    raise(SIGCONT); 
    } 
} 

void handler2(int sig) 
{ 
    if(sig == SIGCONT) 
    { 
    raise(SIGCONT); 
    } 
} 

int main() 
{ 
    int i=-1; 

    if(fork()==0) 
    { 
    signal(SIGCONT,handler1); 
    while(1) 
    { 

     printf("%d\n",i+1); 
     pause(); 
     kill(getpid()+1,SIGCONT); 
    } 
    } 

    if(fork()==0) 
    { 
    signal(SIGCONT,handler2); 
    while(1) 
    { 
     pause(); 

     printf("%d\n",i+1); 
     kill(getpid()-1,SIGCONT); 
    } 
    } 

} 
+1

'0 1 2 4..100'? –

+1

無數的問題..打印一些調試信息和(希望...)你會看到發生了什麼 –

回答

2

信號是不是這個問題的一個好辦法。第一個信號會丟失(它是在第二個孩子開始之前由第一個孩子發送的),並且最終鎖定(因爲其中一個進程正在等待它已經錯過的信號)。

請嘗試使用信號量或消息隊列。他們對這個問題是免疫的,因爲他們不會迷失在系統中,即使並非所有涉及的流程都已經啓動。

+0

我明白了。然而,我有點困惑,因爲這是作爲一項家庭作業,要求我們使用退出/等待或使用信號進行同步,這是我們迄今爲止所瞭解的情況。我不知道如何使用信號量或消息隊列。有沒有可能使用這些? 感謝您的回答。 – user1398371