为什么这个信号量卡住了
Why this semaphores stuck
我制作的程序执行了 2 次这段代码。 2 进程进入信号量并卡住(HERE 评论)。为什么会发生以及如何解决?
sem_t *sem = sem_open(SEM_NAME, O_RDWR);
if (sem == SEM_FAILED) {
perror("sem_open(3) failed");
exit(EXIT_FAILURE);
}
int j = atoi(argv[1]);
int i;
for (i = 0; i < 2; i++) {
printf("%i\n",getpid() );
//HERE!!!!!
if (sem_wait(sem) < 0) {
perror("sem_wait(3) failed on child");}
printf("PID %ld acquired semaphore\n", (long) getpid());
if (sem_post(sem) < 0) {
perror("sem_post(3) error on child");}
printf("wysz\n");
sleep(1);
}
semcl(sem);
return 0;
你应该使用这个创建信号量
sem_open(SEM_NAME, O_RDWR,0777, 1);
设置信号量的起始值为1。
我制作的程序执行了 2 次这段代码。 2 进程进入信号量并卡住(HERE 评论)。为什么会发生以及如何解决?
sem_t *sem = sem_open(SEM_NAME, O_RDWR);
if (sem == SEM_FAILED) {
perror("sem_open(3) failed");
exit(EXIT_FAILURE);
}
int j = atoi(argv[1]);
int i;
for (i = 0; i < 2; i++) {
printf("%i\n",getpid() );
//HERE!!!!!
if (sem_wait(sem) < 0) {
perror("sem_wait(3) failed on child");}
printf("PID %ld acquired semaphore\n", (long) getpid());
if (sem_post(sem) < 0) {
perror("sem_post(3) error on child");}
printf("wysz\n");
sleep(1);
}
semcl(sem);
return 0;
你应该使用这个创建信号量
sem_open(SEM_NAME, O_RDWR,0777, 1);
设置信号量的起始值为1。