一个windows临界区类(从同事手上拷贝过来的)
来源:互联网 发布:手机淘宝怎样找同款 编辑:程序博客网 时间:2024/04/29 11:44
AutoCriticalSection.h
#pragma once
#include <WTypes.h>
/*!
* 自动加锁、解锁的临界区类
*/
class CAutoCriticalSection
{
private :
CRITICAL_SECTION *m_pCS ; //!< 临界区对象指针,指向一个需要加锁的临界区对象
public :
//! 构造函数
/*!
* 通过传入一个临界区对象的引用,实现对这个临界区的加锁
* @param cs 需要加锁的临界区对象,这个对象应该是已经正确的调用了InitializeCriticalSection
*/
CAutoCriticalSection( CRITICAL_SECTION& cs ) : m_pCS( &cs )
{
::EnterCriticalSection( m_pCS ) ;
}
CAutoCriticalSection( PCRITICAL_SECTION pCS ) : m_pCS( pCS )
{
if( m_pCS )
{ // 临界区对象有效
::EnterCriticalSection( m_pCS ) ;
}
}
//! 析构函数
/*!
* 自动解除对传入的临界区的解锁
*/
~CAutoCriticalSection()
{
if( NULL != m_pCS )
{ // 临界区对象有效
::LeaveCriticalSection( m_pCS ) ;
}
}
} ;
测试代码:
#include <iostream>
#include "AutoCriticalSection.h"
using namespace std;
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int tickets=100;
CRITICAL_SECTION g_cs;
void main()
{
InitializeCriticalSection(&g_cs);
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(400000);
DeleteCriticalSection(&g_cs);
system("pause");
return;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
CAutoCriticalSection cs( &g_cs ) ; // 自动锁定服务信息锁
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
CAutoCriticalSection cs( &g_cs ) ; // 自动锁定服务信息锁
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
}
cout<<"thread2 is running!"<<endl;
return 0;
}
- 一个windows临界区类(从同事手上拷贝过来的)
- 直接从windows拷贝过来的代码在linux下不能执行
- 从别人那边运拷贝过来的,sql登录错误
- 从别地方拷贝过来的项目编译问题
- 批处理拷贝东西(从问题里面转载过来的)
- 从同事的一个提问想到的学习途径
- 一个继承单例,临界区的类CEStnDefinition
- xelatex使用从windows拷过来的系统字体
- windows下临界区的使用
- windows 临界区的实现原理
- 拷贝过来的图片验证码生成类
- 在编写windows程序时,只有一个临界区还出现死锁的常见原因。
- 一个简单的多线程例子-临界区
- 各语种的ID列表(从2001版的MSDN中拷贝过来)
- Windows 之临界区
- WINDOWS临界区
- windows临界区
- windows 临界区
- 数据交换平台开发一之XXX大学产品
- sql server数据库性能的优化
- 【编】linux下dd命令详解及应用实例
- 如何先选购机械雕刻机
- 程序员考试大纲与培训指南(2009版)
- 一个windows临界区类(从同事手上拷贝过来的)
- PowerBuilder 全角与半角的互相转换
- carbide编译链接错误汇总,不定时更新
- 嵌入式Linux开发必装软件
- ubuntu8.10更改网络设置
- 2007 Nobel in Economics: Designing Better Markets
- getch()、getche()和getchar()之间的区别 (1)
- 删除Vinaora Visitors Counter的底部链接
- 自己写的简易ajax模型