Windows线程(四)线程同步与互斥问题
程序员文章站
2022-05-04 17:09:30
...
线程同步与互斥的测试函数如下所示:
#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次运行结果如下:
由此可见,该代码的运行结果是不可预知的,不可预知的代码不是程序员所想要的,因此,为了解决这个不可预知的问题,提出了线程同步与线程互斥的概念与解决方法。
上一篇: 高性能php日志方案设想