C++中Semaphore内核对象用法实例
本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考。具体方法如下:
//Semaphore.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<Windows.h>
#include<process.h>
HANDLEg_hSemaphore;
DWORDg_nConut1=0;
DWORDg_nConut2=0;
unsigned__stdcallThreadProc1(void*pArguments)
{
::WaitForSingleObject(g_hSemaphore,INFINITE);
for(inti=0;i<10000;i++)
{
g_nConut1++;
g_nConut2++;
}
::ReleaseSemaphore(g_hSemaphore,1,NULL);
printf("ThreadProc1\n");
return0;
}
unsigned__stdcallThreadProc2(void*pArguments)
{
::WaitForSingleObject(g_hSemaphore,INFINITE);
for(inti=0;i<10000;i++)
{
g_nConut1++;
g_nConut2++;
}
::ReleaseSemaphore(g_hSemaphore,1,NULL);
printf("ThreadProc2\n");
return0;
}
unsigned__stdcallThreadProc3(void*pArguments)
{
::WaitForSingleObject(g_hSemaphore,INFINITE);
for(inti=0;i<10000;i++)
{
g_nConut1++;
g_nConut2++;
}
::ReleaseSemaphore(g_hSemaphore,1,NULL);
printf("ThreadProc3\n");
return0;
}
int_tmain(intargc,_TCHAR*argv[])
{
g_hSemaphore=::CreateSemaphore(NULL,2,2,NULL);
HANDLEhThread[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("mainfinished.\n");
return0;
}
希望本文所述对大家的C++程序设计有所帮助。