0
私はセマフォーを扱っており、コードの一部で苦労しています。
CODE:sem_wait()を使用したCセマフォー
// semaphore initialized to zero
for(int i = 0; i < N; i++)
{
fork();
// statements
sem_wait(semaphore);
printf("Process %d is done\n", i);
exit(0);
}
for(int i = 0; i < N; i++)
{
sem_post(semaphore);
}
問題があり、そのループがあるためsem_wait
の最初の繰り返しの後に停止し、私はそれが唯一のその現在のプロセスを停止したいと思いますので、他のすべての反復を行うことができるとの終わりにコード、私はすべてのプロセスを 'リリース'します。これを達成する方法はありますか?
ありがとうございます!
EDIT:
// initialization of semaphore
semaphore = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
sem_init(semaphore, 1, 0);
私たちに 'semarophe'変数をどのように初期化したかを教えてください。 –
"現在のプロセス"の意味を説明できますか?その意味を説明したら、テストする必要があるものをテストする 'if'ステートメントで' sem_wait'を呼び出します。 –
さて、forループでは 'fork()'をN回呼び出すので、N個のプロセスを作成します。現在のプロセスとは、繰り返しごとに各プロセスを意味します。 – SevO