2

我有大约 10 个对象。每个对象都是不同的类。发送到这些对象的请求(带有返回值的方法调用)来自不同的线程。

我需要同步这些方法调用,一次只能执行一个。一些请求比其他请求具有更高的优先级。这意味着如果有更多的请求等待执行并且发送了另一个 - 优先级高于任何其他等待执行的请求,则它将作为下一个执行。

我不知道如何在 C++ 中解决这个问题。我在考虑命令模式,但它需要大量的“手动”编码。我必须将每个方法调用转换为命令对象。问题在于返回值。有谁知道,这里可以使用什么模式?

4

1 回答 1

4

对于同步,您可以使用某种形式的互斥,以便一次只有一个线程在操作对象。

处理优先级时,您可能需要一个带有比较器的优先级队列,以确定哪种类型的请求具有更高优先级的标准。

每个对象都将接受执行操作的请求,并且它将具有与之关联的优先级和操作(就像您在命令模式中建议的那样)。使用锁定机制,它将通过添加记录来更新优先级队列,然后释放它。它必须锁定队列,因为它是通过多个线程访问的。不需要显式排序——队列总是按照最高优先级排序。因此,要处理命令,只需获取队列中的第一项(如果可用),然后执行操作。

于 2013-04-20T04:38:35.813 回答