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