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

标签 c++ design-patterns asynchronous design-principles

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

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

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

最佳答案

为了同步,您可以使用某种形式的 mutual exclusion这样一次只有一个线程正在操作该对象。

处理优先事项,您可能需要 priority queue使用比较器来确定哪种类型的请求具有更高优先级的标准。

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

关于c++ - 同步来自多个对象的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16116601/

相关文章:

c++ - 使用 Makefile 运行的程序中出现 Xcode 链接错误

c++ - 使用 posix_spawn 启动进程

c++ - 如何在 Opencv 中绘制匹配项?

user-interface - 默认复选框状态 : checked or unchecked?

c++ - 为什么我不能使用 fopen?

oop - 模型- View - Controller 是糟糕的面向对象设计吗?

php - 数据库设计 : Matching sql database keys to php constants?

javascript - 公理 : How to run multiple requests one after the other?

javascript - 如何监听 Javascript 中的变量变化?

typescript - 异步方法的返回类型