同步来自多个对象的异步调用

Synchronize asynchronous calls from more than one object

本文关键字:异步 调用 对象 同步      更新时间:2023-10-16

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

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

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

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

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

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