本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考。具体方法如下:
// Semaphore.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include <process.h> HANDLE g_hSemaphore; DWORD g_nConut1 = 0; DWORD g_nConut2 = 0; unsigned __stdcall ThreadProc1( void* pArguments ) { ::WaitForSingleObject(g_hSemaphore, INFINITE); for (int i=0;i<10000;i++) { g_nConut1++; g_nConut2++; } ::ReleaseSemaphore(g_hSemaphore, 1, NULL); printf("ThreadProc1\n"); return 0; } unsigned __stdcall ThreadProc2( void* pArguments ) { ::WaitForSingleObject(g_hSemaphore, INFINITE); for (int i=0;i<10000;i++) { g_nConut1++; g_nConut2++; } ::ReleaseSemaphore(g_hSemaphore, 1, NULL); printf("ThreadProc2\n"); return 0; } unsigned __stdcall ThreadProc3( void* pArguments ) { ::WaitForSingleObject(g_hSemaphore, INFINITE); for (int i=0;i<10000;i++) { g_nConut1++; g_nConut2++; } ::ReleaseSemaphore(g_hSemaphore, 1, NULL); printf("ThreadProc3\n"); return 0; } int _tmain(int argc, _TCHAR* argv[]) { g_hSemaphore = ::CreateSemaphore(NULL, 2, 2, NULL); HANDLE hThread[3]; hThread[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, NULL); hThread[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc2, NULL, 0, NULL); hThread[2] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc3, NULL, 0, NULL); ::WaitForMultipleObjects(2,hThread,TRUE, INFINITE); printf("g_count1=%d\n", g_nConut1); printf("g_count2=%d\n", g_nConut2); printf("main finished.\n"); return 0; }
希望本文所述对大家的C++程序设计有所帮助。