我使用C++11线程,并需要设置线程与给定处理器内核的关联(windows的调度器并不是智能地将线程委托给内核,而是希望控制哪个线程流向哪个内核)。
对于窗口,有
SetThreadAffinityMask(GetCurrentThread(), affinity);在windows、linux和OSX上,以及底层线程库(windows线程、线程等)的排列情况下,一个跨平台函数会是什么样的呢?
发布于 2017-05-10 15:52:08
如果是C++的一部分,我怀疑它看起来像一对成员函数:
std::error_code std::thread::hardware_affinity(const std::vector<bool>&);和自由功能:
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()方法。等待一个准备和一个好的用例基本上是标准化的。
https://stackoverflow.com/questions/43881005
复制相似问题