多线程线程同步机制是为是各线程能够协同工作而设计的。
Windows系统中有很多种机制可以用于线程同步,最常用的有下面几种:
◇互斥对象( Mutex);
◇ 事件对象(Event);
◇信号量(Semaphore);
◇ 临界区( critical section);
Windows系统中有很多种机制可以用于线程同步,最常用的有下面几种:
◇互斥对象( Mutex);
◇ 事件对象(Event);
◇信号量(Semaphore);
◇ 临界区( critical section);
◇ 可等待计时器(Waitable Timer)。
下面的代码是互斥量代码的演示:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
HANDLE mutex = NULL; //指针
int num = 0;
DWORD WINAPI add(void *p)
{
WaitForSingleObject(mutex, INFINITE);
for (int i = 0; i < 10000; i++)
{
num++;
}
ReleaseMutex(mutex); //释放
return 0;
}
void main()
{
#define N 65
mutex = CreateMutex(NULL, FALSE, NULL); //创建互斥量。
if (mutex == NULL)
{
printf("创建失败!\n");
}
//线程互斥,同一个互斥量,只能解决64个线程。临界区一样。
//如果是服务器上没有这个限制。
HANDLE hd[N];
for (int i = 0; i < N; i++)
{
hd[i] = CreateThread(NULL, 0, add, NULL, 0, NULL);
if (hd[i] == NULL)
{
//线程创建失败!
return;
}
}
WaitForMultipleObjects(N, hd, TRUE, INFINITE);
printf("%d\n", num);
for (int i = 0; i < N; i++)
{
CloseHandle(hd[i]); //关闭每个线程资源
}
CloseHandle(mutex); //关闭互斥量
system("pause");
}