用互斥量处理多线程数据同步

互斥体

    互斥体可以确保只有一个线程来访问共享资源.所以可以进行线程间的数据同步.

简单使用

#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