如何在C ++中实现线程关联

时间:2018-09-13 20:25:31

标签: c++ multithreading design-patterns

我正在使用需要线程相似性的第三方API,即,第三方API返回一个句柄,使用该句柄的任何后续第三方API调用都必须在同一确切线程上执行。在标准C ++ 11(不使用其他任何第三方库,例如boost等)中实现此最佳方法是什么?

理想情况下,我希望能够以

的形式传递闭包
[&] { return api_function(_handle, parameters); }

(如果可能的话)到创建句柄的线程。

我最初的想法是创建一个std :: thread,该线程执行添加到std :: queue的任务。这是最好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

  

任何随后使用该句柄的第三方API调用都必须在   相同的线程

这不是affinity (in the context of processing),它是线程或整个进程与特定CPU /内核的绑定。您需要确保没有其他线程在运行您的任务-无论在哪个处理单元上运行,还是线程在同一单元上运行还是切换到另一个。

  

我最初的想法是创建一个执行任务的std :: thread   被添加到std :: queue中。这是最好的解决方案吗?

这肯定可以为您工作。您将把任务从任何线程推送到一个std::queue<std::function<RetValType()>>(只需确保同步访问),然后一次从允许执行的单个线程中一次调用pop()这样。

这符合您推送此类表达式的要求:

[&] { return api_function(_handle, parameters); }

进入队列。