在两个不同的进程中,在共享内存中初始化了一个信号量。在其中一个过程中,它会不断发布。以下是第二个流程代码的一部分:
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次之后用手工分段故障测试了它并且它像以前一样工作。