我开始使用Poco::NotificationQueue。我注意到一种奇怪的行为,如果使用NotificationQueue在同一个waitDequeueNotification()上等待多个工作线程,则只有一个踏步会收到从主线程发送的通知。
如果您运行Poco附带的NotificationQueue.cpp示例(在这种情况下是通过Visual Studio完成的,但是在Linux上进行测试的结果是相同的),则这很明显。

它的输出是:



预期结果将是:



这是错误还是什么?如果是这样,是否有任何解决方法?

最佳答案

这不是错误,但是您的期望是错误的。
NotificationQueue旨在通知Worker线程有关要执行的作业。每个Notification代表一个要完成的工作。如果Worker 1已经在执行任务,为什么下一个空闲的Worker应该开始在同一任务上工作?多线程的全部用途是工作并行化。因此,可以同时处理多个作业。

如果希望每个线程都接收相同的Notification,则应而不是使用NotificationQueue。相反,您应该将 NotificationCenter Observers一起使用。

有关更多信息,请参见以下幻灯片:NotificationsEvents.pdf

10-08 14:09