用信号量处理多线程数据
简单使用
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int num = 0; //全局变量
DWORD WINAPI add(void *p)
{
HANDLE mySemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "xy"); //打开信号量
if (mySemaphore == NULL)
{
printf("打开信号量失败!\n");
return 0;
}
else
{
WaitForSingleObject(mySemaphore, INFINITE); //等待信号
for (int i = 0; i < 100000; i++)
{
num++;
}
ReleaseSemaphore(mySemaphore, 1, NULL); //增加信号计数
CloseHandle(mySemaphore);
return 1;
}
}
int main(int argc, char *argv[])
{
HANDLE mySemaphore = CreateSemaphore(NULL, 0, 1, "xy"); //创建信号量
ReleaseSemaphore(mySemaphore, 1, NULL); //增加信号计数
HANDLE hd[8];
for (int i = 0; i < 8; i++)
{
hd[i] = CreateThread(NULL, 0, add, NULL, 0, NULL); //创建线程
}
WaitForMultipleObjects(8, hd, TRUE, INFINITE);
printf("num=%d\n", num);
for (int i = 0; i < 8; i++)
{
CloseHandle(hd[i]); //关闭线程
}
system("pause");
return 0;
}
秋风
2016-06-28