多个线程公用函数体

#include<iostream>
using namespace std;
#include<windows.h>

DWORD  WINAPI ThreadProc(LPVOID lpParam)
{

    int* piThreadNum = reinterpret_cast<int*>(lpParam);
    cout<<"start"<<endl;
    char* pszThread0 ="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
    char* pszThread1 ="11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
    char* pszThread2 ="22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222";
    char* pszThread3 ="3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333";
    char* pszThread4 ="4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444";
    char* pszThread5 ="5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555";
    char* pszThread6 ="66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666";
    char* pszThread7 ="77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777";
    char* pszThread8 ="88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888";
    char* pszThread9 ="999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999";
    while(true)
    {
        switch(*piThreadNum)
        {
        case 0:
            cout<<pszThread0<<endl;
            break;
        case 1:
            cout<<pszThread1<<endl;
            break;
        case 2:
            cout<<pszThread2<<endl;
            break;
        case 3:
            cout<<pszThread3<<endl;
            break;
        case 4:
            cout<<pszThread4<<endl;
            break;
        case 5:
            cout<<pszThread5<<endl;
            break;
        case 6:
            cout<<pszThread6<<endl;
            break;
        case 7:
            cout<<pszThread7<<endl;
            break;
        case 8:
            cout<<pszThread8<<endl;
            break;
        case 9:
            cout<<pszThread9<<endl;
            break;
        default:
            cout<<*piThreadNum<<endl;
            break;

        }       
    }    
}    

int main()
{

    HANDLE hThread[10];
    DWORD dwPid[10];
    int aiThreadNum[10];
    for(int i =0;i<10;i++)
    {
        aiThreadNum[i] = i;
        hThread[i] = CreateThread(NULL,0,ThreadProc,&aiThreadNum[i],0,&dwPid[i]);
    }  
    system("pause"); 
    return 0;
}    

多线程访问同一个函数为什么要互斥呢?如果函数是可重入的,就没有这样的问题,随便你怎样访问,每次都会是不同的堆栈来处理这个函数调用吧。

你可能感兴趣的:(多线程,null,System,winapi)