セマフォと共有メモリを使用して、C で生産者と消費者の問題を作成しようとしています。セマフォと共有メモリは動作していますが、個々のコンシューマーとプロデューサーを実行する方法を決定するのに苦労しています。
これは宿題であり、要件にはプロデューサーとコンシューマーがシングル スレッド プロセスである必要があると記載されています。教授に連絡したところ、fork() の使用を勧められました。これは、pthread() を使用できないことを意味すると思います。
現在、私はプロデューサーとコンシューマー用に別々のアプリケーションを持っています (つまり、それぞれに独自の main() があります)。ユーザーが指定した数のプロデューサーとコンシューマーのセットを実行し、一定時間後にアプリケーションを終了できる必要があります。
もともと私はこれを試しました
int Ppid = fork();
if(Ppid == 0){
execv("pathtoproducer", NULL);
}
int Cpid = fork();
if(Cpid == 0){
execv("pathtoconsumer", NULL);
}
//close semaphores and detach shared memory
もちろん、フォークされたプロセスを実行する前にアプリケーションがセマフォを閉じるため、これは問題につながります。
だから私はこのようなことを考えています:
int pid = fork();
if(pid == 0){
execv("pathtoproducer", NULL);
execv("pathtoconsumer", NULL);
}
else{
//wait for timer to run out
}
//detach shared memory and close semaphore
もちろん、私は execv を使用しているため、コンシューマは決して実行されません。プロデューサーとコンシューマーの両方を実行するために使用できるものはありますか?
ありがとう。