// windows_41_Thread_Semaphore.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "windows.h"/* 效果:前面很快出五个,后面一秒出一个*///1、创建信号量//CreateSemaphore//2、等候信号量//WaitForSingleObject//WaitForMultipleObjects//3、释放信号//ReleaseSemaphore//4、关闭信号量//CloseHandleHANDLE g_hSemaphore = NULL;//输入1或者5发送1或者5个信号量DWORD WINAPI ThreadSend3( LPVOID pParam ){ while (true) { //3、释放信号 //ReleaseSemaphore Sleep( 1000 ); CHAR ch = getchar( ); switch (ch) { case '1': //释放信号 ReleaseSemaphore( g_hSemaphore, 1, NULL ); break; case '5': ReleaseSemaphore( g_hSemaphore, 5, NULL ); break; } } return 0;}DWORD WINAPI ThreadSend( LPVOID pParam ){ while (true) {//3、释放信号//ReleaseSemaphore ReleaseSemaphore( g_hSemaphore, 1, NULL ); Sleep( 1000 ); } return 0;}DWORD WINAPI ThreadRecv( LPVOID pParam ){ while (true) { WaitForSingleObject( g_hSemaphore, INFINITE ); printf( "Hello Semaphore\n" ); Sleep( 100 ); } return 0;}void Create( ){ DWORD nThreadID = 0; HANDLE hThread[2] = { 0 }; hThread[0] = CreateThread( NULL, 0, ThreadSend, NULL, 0 ,&nThreadID); hThread[1] = CreateThread( NULL, 0, ThreadRecv, NULL, 0 ,&nThreadID); // 等候两个线程的结束 WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );}int _tmain(int argc, _TCHAR* argv[]){//1、创建信号量//CreateSemaphore g_hSemaphore = CreateSemaphore( NULL, 5, 10, NULL ); Create( );//4、关闭信号量//CloseHandle CloseHandle( g_hSemaphore ); return 0;}