主程序开启两个线程,
红色为程序分配,各自使用一个核儿,两个核儿各分配一个线程。
绿色为程序分配,两个线程使用第一个核儿。
粉红色为程序分配,两个线程使用第二个核儿。
若不主动指定使用哪个核儿,系统自动处理大多集中在一个核儿。
发挥多核儿能力,看来需要程序作一些优化,这一点需要进一步确认。[经过测试发现,系统默认是比较随机的,有时候都集中在一个核儿上,有时候分在两个核儿,所以多线程,适当必要的多核优化,还是能更好发挥机器性能。]
参考代码:
// TestDoubleCore.cpp : Defines the entry point
for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#pragma comment(lib, "Winmm.lib")
using namespace std;
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index=0;
int tickets=1000;
HANDLE hMutex;
void Delay(int nMilliseconds)
{
DWORD dwTime = timeGetTime();
while (timeGetTime() < dwTime +
nMilliseconds)
{
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThreads[2];
DWORD dwReturn;
hMutex=CreateMutex(NULL,FALSE,NULL);
hThreads[0]=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
//dwReturn =
SetThreadAffinityMask(hThreads[0],1);
hThreads[1]=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
//dwReturn =
SetThreadAffinityMask(hThreads[1],2);
WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);
CloseHandle(hThreads[0]);
CloseHandle(hThreads[1]);
CloseHandle(hMutex);
return 0;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
int nCount = 100;
while(nCount >= 0)
{
WaitForSingleObject(hMutex,INFINITE);
cout
<< "count1 : "
<< nCount--
<< endl;
Delay(100);
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
int nCount = 100;
while(nCount >= 0)
{
WaitForSingleObject(hMutex,INFINITE);
cout
<< "count2 : "
<< nCount--
<< endl;
Delay(100);
ReleaseMutex(hMutex);
}
return 0;
}