Semaphore内核对象的使用

来源:互联网 发布:周立功单片机 招聘 编辑:程序博客网 时间:2024/06/05 16:54

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;}


原创粉丝点击