一个线程的CPU亲合力掩码用一个结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作:
CPU_ZERO() 清空一个集合CPU_SET()与CPU_CLR()分别对将一个给定的CPU号加到一个集合或者从一个集合中去掉CPU_ISSET()检查一个CPU号是否在这个集合中
设置获取线程CPU亲和力状态:
sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
该函数设置线程为pid的这个线程,让它运行在mask所设定的CPU上 。如果pid的值为0,则表示指定的是当前线程,使当前线程运行在mask所设定的那些CPU上 。第二个参数是mask所指定的数的长度 。通常设定为() 。如果当前pid所指定的线程此时没有运行在mask所指定的任意一个CPU上,则该指定的线程会从其它CPU上迁移到mask的指定的一个CPU上运行 。
sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
该函数获得pid所指示的线程的CPU位掩码,并将该掩码返回到mask所指向的结构中 。即获得指定pid当前可以运行在哪些CPU上 。同样,如果pid的值为0 。也表示的是当前进程 。
简单的实例:
// 此代码不完整,只是帮助理解绑定过程// 在创建线程时添加以下代码,可以将该线程绑定到1核cpu_set_t mask;// 将掩码清零CPU_ZERO(&mask);// 将1添加到掩码中CPU_SET(1, &mask);// #将本线程绑定到1核sched_setaffinity(0, sizeof(cpu_set_t), &mask);
查看线程是否运行在指定的核上:
【【Linux下进程的CPU配置和线程绑定】】实际工作中,为了方便查看线程的情况,会在创建线程时将相关信息保存到一个文件中,需要时用cat命令查看,内容包括创建了哪些线程、线程名称、线程id和pid、绑定的CPU核、优先级、调度方式等 。
- 五、汇总Linux系统中的权限管理
- 村书记在群众不同意下私自毁山林建养鸡场算违法行为吗
- 二 FFMPEG常用命令:视频相关命令
- 多次拿下移动集团技术发明大奖,TA是怎么做到的?
- 玉米苗后除草剂中药害怎样处理?
- 关于2012cba总决赛的介绍 2012cba总决赛
- DDR3 内存大小计算
- 纵横小说作者专区 纵横 小说
- 大明权臣杨浩写完结了吗
- 请问罗非鱼属于深海鱼还是浅海鱼