我有大约10个物体。每个对象都是不同的类。发送给这些对象的请求(带有返回值的方法调用)来自不同的线程。
我需要同步这些方法调用,一次只能执行一次。有些请求的优先级高于其他请求。这意味着如果有更多的请求等待执行而另一个请求被发送 - 优先级高于其他任何等待执行的请求,它将作为下一个执行。
我不知道如何在C ++中解决这个问题。我在考虑Command模式,但它需要大量的“手动”编码。我必须将每个方法调用转换为命令对象。而问题在于回报价值。 有没有人有想法,这里可以使用什么样的模式?
答案 0 :(得分:4)
对于同步,您可以使用某种形式的mutual exclusion,这样一次只有一个线程可以操作该对象。
处理优先级时,您可能需要一个带有比较器的priority queue来确定哪种类型的请求具有更高优先级的标准。
每个对象都会接受执行操作的请求,并且它将具有与之关联的优先级,以及一个操作(就像您使用命令模式建议的那样)。使用锁定机制,它将通过添加记录来更新优先级队列,然后释放它。它必须锁定队列,因为它是通过多个线程访问的。不需要显式排序 - 队列始终按最高优先级排序。因此,要处理命令,只需获取队列中的第一个项目(如果有),然后执行操作。