用互斥量处理多线程数据同步
互斥体
互斥体可以确保只有一个线程来访问共享资源.所以可以进行线程间的数据同步.
简单使用
#include <Windows.h>
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
#define THREADCOUNT 4 //声明线程的数量
HANDLE mutex; //声明句柄存放互斥体
int num = 0; //声明全局变量
DWORD WINAPI addNum(void *p)
{
WaitForSingleObject(mutex, INFINITE);
for (int i = 0; i < 1000000; i++)
{
num++;
}
ReleaseMutex(mutex); //释放互斥体对象
return 0;
}
int main(int argc, char *argv[])
{
HANDLE hd[THREADCOUNT]; //声明句柄集合存放线程
mutex = CreateMutex(NULL, FALSE, NULL); //创建互斥体
if (mutex == NULL)
{
printf("mutext create is failed!\n");
return;
}
for (int i = 0; i < THREADCOUNT; i++)
{
hd[i] = CreateThread(NULL, 0, addNum, NULL, 0, NULL);
if (hd[i] == NULL)
{
printf("create thread is failed, count=%d\n", i);
break;
}
}
WaitForMultipleObjects(THREADCOUNT, hd, TRUE, INFINITE);
printf("num=%d", num);
CloseHandle(mutex); //关闭互斥体
for (int i = 0; i < THREADCOUNT; i++)
{
CloseHandle(hd[i]);
}
getchar();
return 0;
}
注意事项
使用互斥体,线程数量依然不能超出64个.
秋风
2016-07-02