时间:2021-05-20
本文实例讲述了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++程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、信号量(Semaphore)信号量(Semaphore)是由内核对象维护的int变量,当信号量为0时,在信号量上等待的线程会堵塞,信号量大于0时,就解除堵塞
本文实例讲述了c++中map的基本用法和嵌套用法。分享给大家供大家参考。具体分析如下:C++中map容器提供一个键值对容器,map与multimap差别仅仅在于
C++中构造函数的实例详解c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++
C++中const对象与const成员函数的实例详解const对象只能调用const成员函数:#includeusingnamespacestd;classA{
本文实例讲述了C++实现动态分配const对象的方法。分享给大家供大家参考。具体方法分析如下:一、创建在C++中,允许动态创建const对象,格式如下:cons