如何将线程/进程在一个/多个CPU核上运行

2023-05-16

如何将线程/进程在一个/多个CPU核上运行


设置线程/进程与CPU的亲缘性,就是将线程/进程与CPU核进行绑定起来。

实现方法:
设置线程与指定cpu核绑定:SetThreadAffinityMask(GetCurrentThread(),mask);
设置进程与指定cpu核绑定:SetProcessAffinityMask(GetCurrentProcess(),mask);
参数说明:mask是CPU序号的或运算值:1(00000001)表示只运行在CPU第一个核上,2(00000010)表示只运行在CPU第二个核上,3(00000011)表示运行在CPU第一和第二个核上,4(00000100)表示只运行在CPU第三个核上,以此类推设置绑定对应的CPU核。

#include <iostream>
#include <Windows.h>
#include <thread>
 
using namespace std;
void t();
void t1(int cpu)
{
	int a = 0, b = 0;
	SetThreadAffinityMask(GetCurrentThread(), cpu);//绑定线程与cpu核
	int cpu_num = GetCurrentThreadNumber();//获取当前线程在对应的cpu核上运行
	cout << cpu_num;
	while (true)
	{
	//		cout << (a++) + (b++);//注:在这个循环中,使用cout一直打印输出时,因为一直与外设打交道所以会出现还有一个cpu在运行状态
			//int c= (a++) + (b++);
			//int d = c++;
	}
}
int main() {
	SYSTEM_INFO sysInfo;
	GetSystemInfo(&sysInfo);
	printf("cpu num is %d\n", sysInfo.dwNumberOfProcessors);//cpu核个数
	std::thread fun1(t1,0x08);//在cpu3上运行
	std::thread fun2(t1, 0x04);//在cpu2上运行
	std::thread fun3(t1, 0x02);//在cpu1上运行
	system("pause");
	return 0;
}

任务管理器查看运行情况:
cpu使用情况

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将线程/进程在一个/多个CPU核上运行 的相关文章

  • JavaScript - 防抖与节流 基础代码

    防抖 无论触发了多少次函数 只执行最后一次函数 多次触发合并为一次 span class token tag span class token tag span class token punctuation lt span body sp
  • 一、QGC源码下载以及配置

    QGC V3 4版本 源码存放地址 https github com mavlink qgroundcontrol 下载方式 xff1a 1 git xff1a git clone https github com mavlink qgro
  • 无法被检测到的Linux恶意软件

    网络安全研究人员今天发现了一种完全无法被检测到的Linux恶意软件 xff0c 该恶意软件利用未公开的技术来监视并瞄准以流行的云平台 xff08 包括AWS xff0c Azure和阿里云 xff09 托管的可公开访问的Docker服务器
  • C++中的重难点看这一篇就够了

    sizeof 是一个运算符 xff0c 不是一个函数 看程序效率的快慢 xff0c 可以直接看其汇编语言程序的多少 扩展名 xff1a c语言 xff1a c c 43 43 xff1a cpp Java xff1a 先有类 xff0c 再
  • git 记录一次合并冲突的解决办法

    合并冲突 将远程分支拉到本地 xff0c 执行 git merge 39 分支名 39 时 xff0c 报错 xff1a CONFLICT content Merge conflict in 文件路径名 冲突出现在xx文件里面 Automa
  • 2020-11-10

    将Tomcat整合到Eclipse中 将Tomcat服务器整合到Eclipse工具中 xff0c 可以通过Eclipse启动 关闭tomcat服务器 xff0c 更重要的是 xff0c 可以非常方便的将在Eclipse中创建的Web项目发布
  • Ubuntu18.04搭建 SLAM环境(完美避坑,版本对应不报错)

    Ubuntu18 04搭建 SLAM环境 写到前言一 CMake g 43 43 git的安装二 Eigen的配置三 Sophus的配置四 OpenCV PCL Pangolin的配置安装1 OpenCV的配置2 PCL3 Pangolin
  • linux下运行.sh脚本提示syntax error: unexpected end of file的解决方法

    转载自 xff1a https www jb51 net article 179414 htm CentOS7运行 sh脚本提示syntax error unexpected end of file的解决方法 更新时间 xff1a 2020
  • JS高级编程 - - day03

    一 获取节点示例的方法 直接获取节点实例 xff1a 1 通过内置对象 document 获取 xff0c document对象是HTMLDocument的实例 2 获取根元素的实例 xff1a document documentEleme
  • Python学习笔记——argparse中的action=store_true用法

    前言 Python的命令行参数解析模块学习 示例 参数解析模块支持action参数 xff0c 这个参数可以设置为 store true store false 39 store const 等 例如下面这行代码 xff0c 表示如果命令行
  • 阿里云服务器更换Ubuntu操作系统并配置图形界面

    文章目录 阿里云服务器更换Ubuntu操作系统并配置图形界面环境目标更换操作系统登录阿里云服务器管理控制台进入实例管理页面停止实例更换操作系统 配置图形界面远程连接到服务器配置图形界面配置Ubuntu 阿里云服务器更换Ubuntu操作系统并
  • 【JS】事件流、事件冒泡、事件捕获、阻止冒泡、事件委托

    目录 事件 xff1a 什么是事件流 事件冒泡事件捕获 DOM事件处理 DOM0 DOM2 一个DOM元素同时绑定冒泡捕获 xff0c 执行顺序 xff1a 阻止冒泡 阻止冒泡方法封装 Event事件对象的使用 事件委托 什么是事件委托 实
  • 操作系统学习笔记1--ucos

    实时操作系统 xff08 Real Time Operating System xff0c 简称RTOS xff09 一般裸机为前后台系统模式 xff0c while 1 大循环为后台 xff0c 中断为前台 RTOS操作系统比前后台系统实
  • 使用 PIL, OpenCV, Matplotlib 获取图片通道数

    1 PIL img span class token operator 61 span Image span class token punctuation span span class token builtin open span s
  • 2021-10-24(机器学习实战-ch09 map方法和int不兼容问题)

    机器学习实战 ch09 TypeError unsupported operand type s for map and int span class token operator gt gt span span class token o
  • TVM安装教程(踩坑记录)

    一 Ubuntu环境版本 本文安装的是Ubuntu22 10 强烈建议安装20以上的系统版本 xff0c 否则在后续安装高版本的环境依赖的时候容易出现问题 二 配置相关环境依赖 xff08 git vim miniconda gcc g 4
  • stm32问题汇总2

    问题1 由于所用st库版本不一致 xff0c 某个adc寄存器未配置导致左右对齐方式不对 xff0c 从而读取adc值错误 解决措施 xff1a 用原来的库或者配置该寄存器参数 问题2 xff1a 通过上位机更新程序时未考虑下位机擦写时间
  • 10 个 GitHub 上最火的程序员简历项目,2021 金三银四必备!

    大家好 xff0c 我是你们的 猫哥 xff0c 一个不喜欢吃鱼 又不喜欢喵 的超级猫 前言 猫哥是一个常年混迹在 GitHub 上的猫星人 xff0c 所以发现了不少好的前端开源项目 常用技巧 xff0c 在此分享给大家 公众号 xff1
  • linux驱动开发(二):Linux字符设备驱动程序(设备号、cdev、设备节点、file_operations)

    Linux系统将设备分成字符设备 块设备 网络设备三类 用户程序调用硬件的过程如下 一 用户级 内核级和系统调用 Linux Unix系统下的进程运行分为用户态和进程态两种状态 我们的应用程序通常仅在用户态下运行 xff0c 出于保护内核资
  • ubuntu18.04安装vscode和opencv的新手自己的哔哔叨叨

    这篇是给自己记录以下我的安装过程 xff0c 完全没有理论依据 xff0c 自己摸索的 xff0c 大佬止步 有需要和我一样新手可参考一二 不保证成功哦 首先介绍以下我的环境 我装得是ubuntu和windows的双系统 xff0c ubu

随机推荐