我开始使用Poco::NotificationQueue了。我注意到了奇怪的行为,如果多个工作线程正在使用NotificationQueue在同一个waitDequeueNotification()上等待,那么只有一个进程会收到来自主线程的通知。如果您运行Poco提供的NotificationQueue.cpp示例(在本例中是从Visual完成的,但是在Linux上测试时,结果是相同的),这是显而易见的。
它的产出是:
工人1得到工作通知0工人3得到工作通知2工人2得到工作通知1工人1得到工作通知3工人3得到工作通知4工人2得到工作通知5.
预期结果将是:
工人1得到工作通知0工人3得到工作通知0工人2得到工作通知0工人1得到工作通知1工人3得到工作通知1工人2得到工作通知1.
这是个窃听器还是什么?如果是的话,有什么解决办法吗?
发布于 2014-05-15 14:09:54
这不是一个bug,但你的期望是错误的。
NotificationQueue旨在通知Worker线程要执行的任务。每个Notification表示要完成的任务。如果Worker 1已经在执行任务,为什么下一个空闲的Worker应该开始处理相同的任务?多线程的全部使用是工作的并行化。这样就可以同时处理多个作业。
如果希望每个线程都接收相同的Notification,则应该使用而不是使用NotificationQueue。相反,您应该将NotificationCenter与Observers结合使用。
有关更多信息,请参见这些幻灯片:NotificationsEvents.pdf
发布于 2014-01-14 10:59:57
实际上这是设计意图。您正在获得调用waitDequeueNotification()或dequeueNotification()的新通知。这两个函数都得到通知,并从适当的队列中删除它。
如果希望通知每个工作线程,则需要分别为每个线程发送通知(每个工作线程都应该有自己的队列)。
https://stackoverflow.com/questions/21111543
复制相似问题