滴水 2.27 --信号量
CloseHandle() 信号量的清理
ReleaseSemaphore 函数用于对指定的信号量增加指定的值。
点击查看代码
#include "stdafx.h"
HANDLE hSemaphore;
HANDLE hThread[3];
HWND hEditSet;
DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
TCHAR szBuffer[10];
DWORD dwTimmer = 0;
WaitForSingleObject(hSemaphore, INFINITE);
while (dwTimmer < 100)
{
printf("线程 1现抢红包值:%d\n", dwTimmer);
Sleep(100);
dwTimmer++;
}
ReleaseSemaphore(hSemaphore, 1, NULL);
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
TCHAR szBuffer[10];
DWORD dwTimmer = 0;
WaitForSingleObject(hSemaphore, INFINITE);
while (dwTimmer < 100)
{
printf("线程 2 现抢红包值:%d\n", dwTimmer);
Sleep(100);
dwTimmer++;
}
ReleaseSemaphore(hSemaphore, 1, NULL);
return 0;
}
DWORD WINAPI ThreadProc3(LPVOID lpParameter)
{
TCHAR szBuffer[10];
DWORD dwTimmer = 0;
WaitForSingleObject(hSemaphore, INFINITE);
while (dwTimmer < 100)
{
printf("线程 3 现抢红包值:%d\n", dwTimmer);
Sleep(100);
dwTimmer++;
}
ReleaseSemaphore(hSemaphore, 1, NULL);
return 0;
}
DWORD WINAPI ThreadBegin(LPVOID lpParameter)
{
int dwMoney = 0;
//创建信号量
hSemaphore = CreateSemaphore(NULL, 0, 3, NULL);
//线程创建
hThread[0] = ::CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
hThread[1] = ::CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);
hThread[2] = ::CreateThread(NULL, 0, ThreadProc3, NULL, 0, NULL);
//开始准备红包
while (dwMoney < 1000)
{
dwMoney++;
}
printf("红包值:%d", dwMoney);
ReleaseSemaphore(hSemaphore, 2, NULL);
::WaitForMultipleObjects(3, hThread, TRUE, INFINITE);
::CloseHandle(hSemaphore);
return 0;
}
int main(int argc, char* argv[])
{
int i = 1000;
HANDLE hThread = ::CreateThread(NULL, 0, ThreadBegin,
NULL, 0, NULL);
while (1)
{
Sleep(5000);
}
return 0;
}
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/17161448.html