windows/linux避免多线程应用程序在多核间切换,影响程序效率

来源:互联网 发布:淘宝自动充值没到账 编辑:程序博客网 时间:2024/06/07 01:53

个人在编写应用程序时,需要指定某个线程在cpu特定核上运行,通过测试,发现应用该函数,对应用程序的效率有很大提高。但是也不是对所有情况都试用:个人认为该优化方法要求线程数量不能太多,其中有一个线程执行频率较高,对实时性要求比较高,比如网络摄像头数据获取线程等等。

在windows平台下的函数为:DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);其中hThread 为要指定的线程,dwThreadAffinityMask为被指定CPU的核ID,如果为四核处理器,则可以为0x00000001,0x00000002,0x00000004,0x00000008。

在linux平台下的函数为:   int pthread_setaffinity_np(pthread_t thread,size_t cpusetsize,const_cpu_set_t *cpuset);

int pthread_getaffinity_np(pthread_t thread,size_t cpusetsize,const_cpu_set_t *cpuset);

***因为对linux不是很了解,所以在此不进行详细介绍,有兴趣的朋友,可以度娘一下

//指定主线程在cpu的某个核

#include <windows.h>
HANDLE hThread;
int main()
{
hThread = GetCurrentThread();
SetThreadAffinityMask(hThread,0x00000001);
while(1)
{
//主线程中需要做的任务
}
return 0;
}

0 0
原创粉丝点击