首页 > 解决方案 > C ++ 11 如何在独立内核中再次从操作系统获取线程?

问题描述

这是问题,我得到了一个分配给某个 cpu 核心的线程。在那个线程中,我想创建另一个线程,它应该在非隔离 cpu 上(而不是在创建它的隔离 cpu 上)。

    std::thread th2;

std::thread th1([&] () {


    th2 = std::thread([&] () {

        //do something;
    });

});


cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
CPU_SET(core, &cpu_set); // lets say 2
pthread_setaffinity_np(th1.native_handle(), sizeof(cpu_set_t), &cpu_set);


th2.join();
th1.join();

这会导致意外的上下文切换有没有办法说内部线程再次从操作系统获取 cpu(没有明确的 cpu 亲和性)?

标签: multithreadingc++11stdthread

解决方案


在它产生所有不需要 CPU 亲和性限制的子代之后,您应该能够从线程本身设置 CPU 亲和性。


推荐阅读