线程同步与互斥的测试函数如下所示:
#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次运行结果如下:
由此可见,该代码的运行结果是不可预知的,不可预知的代码不是程序员所想要的,因此,为了解决这个不可预知的问题,提出了线程同步与线程互斥的概念与解决方法。
