首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台线程关联函数

跨平台线程关联函数
EN

Stack Overflow用户
提问于 2017-05-09 22:47:01
回答 1查看 764关注 0票数 2

我使用C++11线程,并需要设置线程与给定处理器内核的关联(windows的调度器并不是智能地将线程委托给内核,而是希望控制哪个线程流向哪个内核)。

对于窗口,有

代码语言:javascript
复制
SetThreadAffinityMask(GetCurrentThread(), affinity);

在windows、linux和OSX上,以及底层线程库(windows线程、线程等)的排列情况下,一个跨平台函数会是什么样的呢?

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 15:52:08

如果是C++的一部分,我怀疑它看起来像一对成员函数:

代码语言:javascript
复制
std::error_code std::thread::hardware_affinity(const std::vector<bool>&);

和自由功能:

代码语言:javascript
复制
std::error_code std::this_thread::hardware_affinity(const std::vector<bool>&);

假设我们谈论的资源与std::thread::hardware_concurrency()所计算的大致相同,并且std::thread实现必须已经处理“底层线程库的所有排列”。

自己构建一个库,或者使用一个实用程序库(我现在还不能命名一个现有的库),它可能看起来如下:

thread_utils::hardware_affinity(std::thread::native_handle_type, const std::vector<bool>&)

但它必须在内部支持所有的排列。这并不难(很多应用程序都是出于必要而完成的),但这比堆栈溢出答案所能承受的工作量更大。^_^

这种方法的一个令人讨厌的限制是,尽管存在成员函数std::thread::native_handle(),但没有std::this_thread::native_handle()方法。等待一个准备一个好的用例基本上是标准化的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43881005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档