【发布时间】:2024-01-21 03:08:01
【问题描述】:
我有一个进程产生了几个子进程。它们都共享一个信号量。
在我的主程序中。
sem_t *sharedSem = sem_open(SHAREDSEM, O_CREAT, 0600, 4); // Initial 1
在我的子程序中。
> sem_t * serverSem = sem_open(SHAREDSEM, 0);
sem_wait(serverSem);
printf("PRINTING\n");
sem_post(sharedSem);
我的观察是问题出在 sem_wait 中。在子进程上的 sem_wait 之前发生的任何事情都会打印出来。但是, sem_wait 之后的 printf() 永远不会打印。一次也没有。
我已经使用了几个小时,但我看不到我的问题。任何人都可以伸出援助之手吗?谢谢。
【问题讨论】:
-
信号量是否正在初始化(sem_init)? sem_wait() 调用被阻塞,因为信号量值为零。
-
如果我删除 sem_wait,sem_post 之后的任何内容也不会打印。似乎任何 sem_ 函数都会阻塞。
-
你检查sem_open()调用成功了吗?
-
@suspectus:
sem_init和sem_open是互斥的。
标签: c concurrency ipc multiprocessing semaphore