【发布时间】:2018-08-22 02:37:12
【问题描述】:
我的 C++ 11 应用程序中有长时间运行的函数,它本质上是 sub_main。我需要通知这个函数situation 在不同的线程中出现。要求:
-
situation可以随时升起 - 应用程序最多只能在一个地方处理
situation(也可以不处理) - 它确实不需要在执行中需要超快也不延迟
到目前为止,我考虑了两种选择:
- 通过包含
situations内部队列的factoree 传递对象工厂。然后在sub_main内定期轮询该对象以获取新的situations。轮询对象从队列中移除。当应用程序决定它不会处理特定位置的情况时,它可以将其移回全局situations队列,下一个构造的factoree将获得situation(因此可以在sub_main的其他地方处理) - 类似情况,但不是轮询,而是根据需要使用 lambda 函数更新
sub_main内部的局部变量。此版本不使用连续轮询,但可读性较差
两者似乎都有点复杂,我想知道我是否错过了更简单的解决方案。问题是sub_main 正在我的库之外实现,我正在向最终用户提供我的situations
【问题讨论】:
-
你可以使用变量和互斥体吗?
-
@JakeFreeman 哪个变量?全局变量?传递变量?哪种类型?
-
您可能在描述
std::promise和std::future的交互。 -
我会避免使用全局变量。如果您有多个线程影响同一个变量,它们会变得混乱。我所做的是将回调函数传递给每个线程,并将其用作从线程返回调用者的通知网关。
标签: c++ multithreading producer-consumer