【问题标题】:sem_wait unable to continuesem_wait 无法继续
【发布时间】: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_initsem_open 是互斥的。

标签: c concurrency ipc multiprocessing semaphore


【解决方案1】:

我认为这种行为是由于之前的运行缺少 sem_close() 造成的。 只需确保您正确关闭了信号量,以便在以后的运行中正确分配信号量的起始值并且 sem_wait() 应该可以工作。

【讨论】: