Я пытаюсь выяснить, как установить сходство потоков с std :: thread или boost :: thread, используя win32 API. Я хочу использовать функцию SetThreadAffinityMask для закрепления каждого потока на определенном ядре в моей машине.
Я использовал функцию-член thread_handle для получения дескриптора потока, который предоставляется функции SetThreadAffinityMask. Однако в результате этого функция SetThreadAffinityMask возвращает 0, что указывает на ошибку установки соответствия потоков.
unsigned numCores = std::thread::hardware_concurrency();
std::vector<std::thread> threads(numCores);
for (int i = 0; i < numCores; i++)
{
threads.push_back(std::thread(workLoad, i));
cout << "Original Thread Affinity Mask: " << SetThreadAffinityMask(threads[i].native_handle() , 1 << i) << endl;
}
for (thread& t : threads)
{
if (t.joinable())
t.join();
}
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
Оригинальная маска сродства темы: 0
... и т.д.