0

匿名posixセマフォを使用するプロセスで生産者/消費者の問題を実現するには? (つまり、テキストを順番に出力する2つのプロセスが必要です.2番目は1番目からフォークできます)

pthread_t pchild; 
int i = 0; 
pid_t pid; 

sem_init(&fst, 1, 1); 
sem_init(&scnd, 1, 0); 

if((pid = fork()) == 0){  

    while(i<10){ 
    sem_wait(&scnd); 
    printf("CHILD\n"); 
    sem_post(&fst); 
i++; 
} 
}else if(pid != -1){     

while(i<10){ 
        sem_wait(&fst); 
        printf("parent\n"); 
        sem_post(&scnd); 
        i++; 
        } 
}else{ printf("error - fork !!!\n");} 

sem_destroy(&fst); 
sem_destroy(&scnd); 

このコードは「親」のみを出力します-1回ですが、Oracleドキュメントhttp://docs.oracle.com/cd/E19253-01/816-5137で「名前のないセマフォはプライベートであり、fork()を介して継承されます」とわかりました/sync-39/index.html どうしたの?


私の解決策はこちらhttps://www.dropbox.com/s/zzgsyj9rq1ngv0s/ost_13p.c

4

1 に答える 1

1

共有メモリにセマフォを割り当てて ( のようにshm_open)、再試行してください。

psharedに引数を設定するだけでは不十分sem_initです。引数が参照するメモリsem_t *も、プロセス間で共有する必要があります。

于 2012-12-18T20:38:40.023 に答える