Windows執行緒(四)執行緒同步與互斥問題
阿新 • • 發佈:2018-12-26
執行緒同步與互斥的測試函式如下所示:
#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次執行結果如下:
由此可見,該程式碼的執行結果是不可預知的,不可預知的程式碼不是程式設計師所想要的,因此,為了解決這個不可預知的問題,提出了執行緒同步與執行緒互斥的概念與解決方法。