我正在通过生产者读取文件并将它们写入消费者的其他文件,当生产者读取输入文件时,我需要关闭其中一个信号量,消费者不再等待生产者将一些新输入插入缓冲区。有没有办法做到这一点?
问候...
我正在通过生产者读取文件并将它们写入消费者的其他文件,当生产者读取输入文件时,我需要关闭其中一个信号量,消费者不再等待生产者将一些新输入插入缓冲区。有没有办法做到这一点?
问候...
几种可能性:
pthread_kill()
向任何等待的消费者发送信号。这应该将他们踢出 ,在sem_wait()
那里他们可以检查EINTR
返回码。这也需要仔细编码以避免竞争。我对 POSIX 信号处理不是特别熟悉,但我确信它有自己的一套包袱,你需要非常小心地正确处理。当然,一旦完成,某人(生产者线程?)需要等待所有消费者线程清理 - 可能通过pthread_join()
对它们执行操作 - 在信号量被销毁/关闭之前。
如果您已经使用信号量对某些内容进行了编码,则条件变量选项可能会发生更大的变化,并且在正常情况下在生产和消费(可能)时它可能不会那么高效。但我敢打赌,推理可能的竞争条件并正确处理它们会更容易。请注意,我并不是说这很容易,只是说它可能更容易。