测试双核CPU的多线程能力

主程序开启两个线程,

红色为程序分配,各自使用一个核儿,两个核儿各分配一个线程。

绿色为程序分配,两个线程使用第一个核儿。

粉红色为程序分配,两个线程使用第二个核儿。

若不主动指定使用哪个核儿,系统自动处理大多集中在一个核儿。

发挥多核儿能力,看来需要程序作一些优化,这一点需要进一步确认。[经过测试发现,系统默认是比较随机的,有时候都集中在一个核儿上,有时候分在两个核儿,所以多线程,适当必要的多核优化,还是能更好发挥机器性能。]

参考代码:

// 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;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11437.html