【发布时间】:2019-02-18 15:19:51
【问题描述】:
我正在使用需要线程亲和性的第三方 API,即第三方 API 返回一个句柄,使用该句柄的任何后续第三方 API 调用都必须在同一线程上执行。在标准 C++11 中实现这一点的最佳方法是什么(不使用其他 3rd 方库,例如 boost 等)?
理想情况下,我希望能够传入表单的闭包
[&] { return api_function(_handle, parameters); }
尽可能创建句柄的线程。
我最初的想法是创建一个 std::thread 来执行添加到 std::queue 的任务。这是最好的解决方案吗?
【问题讨论】:
-
线程亲和性不是标准库的线程功能所识别的。
-
你描述的不是我理解的“线程亲和力”。听起来您需要能够运行特定线程并根据需要向每个线程调度指令(和数据)。老实说,这对于
SO来说听起来有点宽泛。 -
@FrançoisAndrieux 你是在暗示它不能完成吗?似乎创建一个在(同步)队列的内容(<:function> 类型)上循环的工作线程,然后对其内容进行操作似乎是可行的。
-
@Galik 是的,似乎对此感到困惑,我称之为处理器亲和力,即将线程或进程固定到特定核心。这就是您认为的线程亲和性吗?
-
听起来您只需要注意不要从其他任何地方调用该库的代码,因此第一步是 /not/ 打破规则。第二步是实现该线程服务的任务队列,并且可以在任何地方使用该队列来使用该库执行代码。查看
std::function来完成任务,剩下的就是工作和/或在标准库或其他地方找到合适的工具。
标签: c++ multithreading design-patterns