Windows核心编程学习笔记(15)--进程和线程与CPU的关联性

Drecik学习经验分享

转载请注明出处:http://blog.csdn.net/drecik__/article/details/8096253

 

默认情况下,Windows Vist或以后版本在给线程分配CPU时,使用软关联,即如果其他因素一样,系统将是线程在上一次运行的处理器上运行。

Windows还支持硬关联,即可以控制线程在某些特定CPU上运行(如果有多个CPU的话),可以使用SetProcessAffinityMask来限制进程上的线程只在可用CPU的一个子集上运行:

BOOL SetProcessAffinityMask(
	HANDLE hProcess,	// 进程句柄;
	DWORD_PTR dwProcessAffinityMask	// 关联性掩码,表示在那些CPU上运行, 每一位代表一个CPU;
	);
还可以返回关联性的掩码,GetProcessAffinityMask:
BOOL GetProcessAffinityMask(
	HANDLE hProcess,	// 进程句柄;
	PDWORD_PTR lpProcessAffinityMask,	//进程掩码,总是下面系统掩码的一个真子集;
	PDWORD_PTR lpSystemAffinityMask		// 系统掩码,表示系统哪个CPU上可以运行该进程上的线程;
	);
通过SetThreadAffinityMask可以限制一个线程的关联性:
// 返回值是线程之前的掩码;
DWORD_PTR SetThreadAffinityMask(
	HANDLE hThread,		// 线程句柄;
	DWORD_PTR dwThreadAffinityMask	// 关联性掩码;
	);
下面给出个例子,假设有4个CPU,现在限制Thread0只能在CPU1上运行,Thread1,2,3只运行在CPU1,CPU2和CPU3上:
SetThreadAffinityMask( hThread0, 0x00000001 );

SetThreadAffinityMask( hThread1, 0x0000000E );
SetThreadAffinityMask( hThread2, 0x0000000E );
SetThreadAffinityMask( hThread3, 0x0000000E );
在任务管理器中可以手动更改进程与CPU的关联性,右键单击一个进程选择设置相关性就可以在弹出的对话框中进行设置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值