我正在使用信号量,并且正在为代码的一部分而苦苦挣扎。
码:

// 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,该循环在第一次迭代后停止,但是我希望它仅停止当前进程,因此可以完成所有其他迭代,并且在代码结束时,我将“释放”所有进程。有没有办法做到这一点?
谢谢!

编辑:

// initialization of semaphore
semaphore = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
sem_init(semaphore, 1, 0);

最佳答案

请检查fork返回值。在此基础上,您将确定代码是在子进程还是父进程下执行。因此调用sem_wait。

关于c - 使用sem_wait()的C信号量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43716218/

10-13 07:31