本文实例讲述了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;
}
//
#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++程序设计有所帮助。