1. 程式人生 > >Windows執行緒(四)執行緒同步與互斥問題

Windows執行緒(四)執行緒同步與互斥問題

執行緒同步與互斥的測試函式如下所示:

#include <stdio.h>
#include <process.h>
#include <Windows.h>

#define THREAD_NUM 10

unsigned long g_nNum;

unsigned int __stdcall ThreadFun(void *pM)
{
    int nThreadNum = *(int *)pM;
    Sleep(50);
    g_nNum++;
    Sleep(0);

    printf("執行緒編號為%d  全域性資源值為%d\n"
, nThreadNum, g_nNum); return 0; } int main(int argc, char *argv[]) { HANDLE handle[THREAD_NUM]; int i = 0; g_nNum = 0; printf("----------------------經典執行緒同步程式碼----------------------\n"); while(i < THREAD_NUM) { handle[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, &i, 0
, NULL); i++; } WaitForMultipleObjects(THREAD_NUM, handle, 1, INFINITE); system("pause"); return 0; }

以上程式碼在Visual Studio 2010中的5次執行結果如下:
這裡寫圖片描述


這裡寫圖片描述


這裡寫圖片描述


這裡寫圖片描述


這裡寫圖片描述


由此可見,該程式碼的執行結果是不可預知的,不可預知的程式碼不是程式設計師所想要的,因此,為了解決這個不可預知的問題,提出了執行緒同步與執行緒互斥的概念與解決方法。