所以基本上我想在子进程创建后暂停一点,这样父进程就可以在共享内存中为它准备一些数据。我正在尝试使用信号量,如此处所建议的:How to share semaphore between processes using shared memory。
问题 nr 1:孩子无法打开信号量。
问题 2:strerror 返回一个 int,但 man strerror 清楚地说它返回一个 char *。
为避免“您尝试过什么”:
sem = sem_open("/semaphore", O_CREAT, 0644, 0);
for (i = 0; i < num; i++)
{
pid = fork();
if (pid == 0)
{
sem = sem_open("/semaphore", 0);
if (sem == SEM_FAILED)
{
printf( "Error : %d\n", strerror(errno ));
exit(0);
}
sem_wait(sem);
exit(0);
}
}
prepare_data_for_child_processes();
for (i = 0; i < mpi_comm_world->np; i++)
sem_post(sem);
sem_close(sem);
sem_unlink("/semaphore");