写在头文件
用于记录自己的学习记录,以免以后忘了
里面的代码是我从别的地方CV过来的,我自己学习用的!
adr:windows多线程(五) 互斥量 Mutex - ay-a - 博客园 (cnblogs.com)
#include <stdio.h>
#include <windows.h>
const unsigned int THREAD_NUM = 15;
unsigned int g_Count = 0;
HANDLE g_Mutex; //声明一个内核对象
DWORD WINAPI ThreadFunc(LPVOID);
int main()
{
g_Mutex = CreateMutex(NULL,false,NULL); // 创建互斥量,初始化为触发状态
HANDLE hThread[THREAD_NUM];
for (int i = 0; i < THREAD_NUM; i++)
{
hThread[i] = CreateThread(NULL, 0, ThreadFunc, &i, 0, NULL); // 创建线程
}
WaitForMultipleObjects(THREAD_NUM, hThread, true, INFINITE); //一直等待,直到所有子线程全部返回
printf(" 总共 %d 个线程给 g_Count 的值加1,现在 g_Count = %d \n\n", THREAD_NUM, g_Count);
CloseHandle(g_Mutex); //释放互斥量
return 0;
}
DWORD WINAPI ThreadFunc(LPVOID p)
{
int ThreadNum = *(int *)p;
WaitForSingleObject(g_Mutex, INFINITE); //等待互斥量触发
printf(" 第 %d 个线程给全局资源 g_Count 的值加1,现在 g_Count = %d\n", ThreadNum, ++g_Count);
ReleaseMutex(g_Mutex); // 触发互斥量
return 0;
}
主线程生成 主互斥量,在子线程里面运用等待实现