multithreading - 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 亲和性)?
解决方案
在它产生所有不需要 CPU 亲和性限制的子代之后,您应该能够从线程本身设置 CPU 亲和性。
推荐阅读
- makefile - 通过包含不存在的文件来构建目标
- python - Python -> Selenium:无法上传文件
- python - tf 转换器全部映射,同时仍然遇到未解决的自定义操作
- hex - 将十六进制字节转换为坐标
- google-cloud-platform - 云视觉模型图像找不到相似之处
- linked-list - list_for_each vs list_for_each_safe,安全从何而来?
- apache-spark - 如何使用 apache spark scala 读取 XLSX 的整个目录?
- kotlin - 如何以功能样式生成一定长度的非穷举排列
- typescript - 为什么函数类型的参数不能接受其参数实现原始参数接口的参数?
- c++ - C ++构造函数委托,但如何(某种)反转?