观察者设计模式:几个问题

时间:2013-12-30 07:00:46

标签: multithreading observer-pattern

我正在浏览观察者设计模式,并且有一些我没有明确答案的问题,所以会很感激周围的任何想法/想法。这特别是围绕多线程场景中的异步观察者回调:

  1. 当知道观察者可以在很短的时间间隔内从主体接收多个事件通知时,设计此方法的最佳方法是什么。因此,即使单个回调未完成,也很有可能获得多个通知。怎么办呢?如何有效地使用锁定?

  2. 如何在回调仍在执行时处理取消订阅请求?如何在这种情况下避免死锁?

  3. 我认为我们可以先开始讨论这个问题,并确保我们会在回答的时候提出更多问题。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

<强>数目:

  1. 为了在第一个通知完成时处理多个通知,您可以考虑使用信号量和回调队列来确保只有一个回调服务和任何时间点。一旦完成,基于FIFO,将其移出并移至队列中的下一个回调。

  2. 如果您正在使用等待队列和信号量,那么处理取消订阅请求也变得很容易,您可以循环遍历队列中等待服务的所有回调并splice输出(以javascript术语)已取消订阅的回调。