设置线程的亲缘性(指定其所运行的CPU核心)

#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <time.h>

unsigned int _stdcall thread_proc(void* arg)
{
	double	x =	100.0;
	int		r = 0;

	srand((unsigned)time(0) );
	while(1)
	{
		r = rand();//模拟运算
		x/=r;
	}
	return 0;
}

int main()
{
	SYSTEM_INFO s_info={0};
	DWORD		cpu_count = 0;
	size_t		i=0;
	HANDLE*		hThread;

	GetSystemInfo(&s_info);

	//取系统CPU个数
	cpu_count	= s_info.dwNumberOfProcessors;

	//根据CPU个数创建相应数量的线程
	hThread		= calloc(cpu_count,sizeof(HANDLE) );

	for(i=0;i<cpu_count;i++)
	{
		//创建初始状态为挂起
		hThread[i] = (HANDLE)_beginthreadex(NULL,0,thread_proc,NULL,CREATE_SUSPENDED,NULL);
		/*
		*00000001:CPU0
		*00000010:CPU1
		*00000100:CPU2
		*00001000:CPU3
		**/
		SetThreadAffinityMask(hThread[i], 1<<i);//CPU掩码
		ResumeThread(hThread[i]);//唤醒
	}
	printf("打开任务管理器查看...\n");
	for(i=0; i<cpu_count;i++)
	{
		WaitForSingleObject(hThread[i],INFINITE);
	}
	free(hThread);
	return 0;
}

设置线程的亲缘性(指定其所运行的CPU核心)

时间: 2024-08-11 03:36:55

设置线程的亲缘性(指定其所运行的CPU核心)的相关文章

【记录一个问题】android ndk下设置线程的亲缘性,总有两个核无法设置成功

参考了这篇文章:https://blog.csdn.net/lanyzh0909/article/details/50404664 大体的代码如下: #include <pthread.h> #include <sched.h> #include <stdio.h> #include <stdlib.h> #include <sys/sysinfo.h> #include <sys/types.h> #include <unis

SetThreadAffinityMask设置线程亲缘性

The SetThreadAffinityMask function sets a processor affinity mask for the specified thread. [delphi] view plaincopyprint? DWORD_PTR SetThreadAffinityMask( HANDLE hThread, DWORD_PTR dwThreadAffinityMask ); Parameters hThread [in] Handle to the thread

Windows内核之线程的调度,优先级,亲缘性

1 调度 Windows不是实时操作系统,它是抢占式多线程操作系统.在假设所有优先级相同的情况下,CPU对线程的调度原则是每隔20m就会切换到下一个线程,根据Context中的IP和SP来接着执行上次的东西.Windows永远不会让1个线程去独占一段时间. 2 可调度性 系统只调用可以调度的线程,其实系统的大部分线程都是处于不可调度的状态,要么处于暂停的状态,要么处于休眠的状态. 3 线程的暂停和恢复 <1>在CreateThread的时候通过制定CREATE_SUSPENDED来让线程暂停执

进程、线程亲缘性和画笔CPen

l         进程亲缘性 l         线程亲缘性 l         画笔CPen   一.进程线程亲缘性  SetProcessAffinityMask  //设置进程 可以使用的CPU SetThreadAffinityMask  //设置进程 可以使用的CPU void CDialog_Thread_Priority_test::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 HANDLE ph=GetCurrentProcess

Linux CPU亲缘性详解

前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是下意识的打开了google并输入CPU亲缘性(CPU Affinity)简单了做了个了解. 后来,在笔者参加实际工作以后,就碰到了这么两个问题. 问题一:如何在SMP的系统中,保证某个特定进程即使在其他进程都很忙的情况下都能够获得足够的CPU资源?解决的思路主要有以下两种: 提高进程的处理优先级 从

回炉重造之重读Windows核心编程-007-线程的调度、优先级与亲缘性

Windows被设计成一个抢占式的操作系统,用某种算法来确定哪些线程应该在何时被调度和运行多长时间.每隔20ms左右,Windows就要查看当前所有线程的内核对象,找到可以被调度的一个,将它加载到CPU寄存器中.这个操作成为上下文切换.Windows实际上保存了一个记录,说明每个线程获得了多少次运行的机会.使用MicrosoftSpy++这个工具可以了解这个情况. 一个线程随时可以停止运行,一个线程可以进行调度.可以对线程进行一定程度的控制,但是不能太多.不能保证一个线程做任何事. 7.1暂停和

C#的线程类之Thread类以及对为什么设置线程优先级却不先执行这一问题本身的认识

1.C#对线程进行操作时,通过Thread类,可以对线程进行创建.挂起.恢复.休眠.终止及设置优先级. Thread类位于System.Threading命名空间下,该命名空间还包含一个ThreadPool类(允许用户使用系统提供的线程池)和一个Timer类(在线程池上执行回调方法) 在线程运行期间,不同的时刻会表现为不同的状态,但它总是处于由ThreadState定义的一个或多个状态中.用户可以通过使用ThreadPriority枚举为线程定义优先级,但不能保证操系统会接收该优先级 2.Thr

windows下绑定线程(进程)到指定的CPU核心

一个程序指定到单独一个CPU上运行会比不指定CPU运行时快.这中间主要有两个原因:1)CPU切换时损耗的性能.2)Intel的自动降频技术和windows的机制冲突:windows有一个功能是平衡负载,可以将一个线程在不同时间分配到不同CPU,从而使得每一个CPU不“过累”.然而,Inter又有一个技术叫做SpeedStep,当一个CPU没有满负荷运行时自动降频从而达到节能减排的目的.这两个功能实际是冲突的:一个程序被分配到多个CPU协同工作->每个CPU都不是满载->每个CPU都会降频-&g

java 22 - 6 多线程之线程调度和设置线程的优先级

线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调度模型: 分时调度模型 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片 抢占式调度模型 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些. Java使用的是抢占式调度模型. 既然线程设有设置优先级,