发布信号量时,sem_wait不会返回

时间:2015-03-15 21:35:56

标签: c++ c synchronization pthreads semaphore

在两个不同的进程中,在共享内存中初始化了一个信号量。在其中一个过程中,它会不断发布。以下是第二个流程代码的一部分:

sem_init(&(memoryUpper.data()->write), 1, 1);

while(threadIsRunning)
{
    std::cerr << __FILE__ << " :: " << __LINE__ << std::endl;
    sem_wait(&(memoryUpper.data()->write));
    std::cerr << __FILE__ << " :: " << __LINE__ << std::endl;
}

但是,第二个过程不会多次通过sem_wait

在没有线程的更干净的过程中测试相同的代码使其工作。同时将sem_wait(...)转为while(sem_trywait(...))可解决问题。另一方面,SIGINT在打断之前打印要打印的输出。

P.S。:它不应该是cout缓冲区的问题,因为我已经在等待第10次之后用手工分段故障测试了它并且它像以前一样工作。

0 个答案:

没有答案