gpt4 book ai didi

c - C语言进程同步

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:19 25 4
gpt4 key购买 nike

我尝试将两个进程(子进程和父进程)与信号量同步,但我的尝试失败了。

C源代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/stat.h>


int compteur=0;
sem_t *sem;

int main()
{
void *ret;
sem = sem_open("/sem", O_CREAT, 0644, compteur);
sem_init(sem, 0, 0);
pid_t pid;
pid=fork();
switch (pid)
{
case -1:
printf("Erreur: echec du fork()\n");
exit(1);
break;
case 0:
/* PROCESSUS FILS */
printf("Processus fils : pid = %d\n", getpid() );
sem_post(sem);
break;
default:
sem_wait(sem);
/* PROCESSUS PERE */
printf("Ici le pere%d: le fils a un pid=%d\n",getpid(),pid);
printf("Fin du pere.\n");
}
}

我认为问题是信号量在子进程中不可见。我该如何解决这个问题?

最佳答案

您的 sem_init 应该是:

sem_init(sem, 1, 0);  

也就是说,第二个参数应该是非零的。
因为:

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);

(来自 man sem_init)

If  pshared  has  the  value 0, then the semaphore is shared between the threads of a process...
If pshared is nonzero, then the semaphore is shared between processes...

关于c - C语言进程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16035732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com