我正在使用需要线程相似性的第三方API,即,第三方API返回一个句柄,使用该句柄的任何后续第三方API调用都必须在同一确切线程上执行。在标准C ++ 11(不使用其他任何第三方库,例如boost等)中实现此最佳方法是什么?
理想情况下,我希望能够以
的形式传递闭包[&] { return api_function(_handle, parameters); }
(如果可能的话)到创建句柄的线程。
我最初的想法是创建一个std :: thread,该线程执行添加到std :: queue的任务。这是最好的解决方案吗?
答案 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); }
进入队列。