互斥量的封装

很多项目涉及多线操作,多个线程访问共享buffer时,一般是需要按顺序访问的,必须保证共享buffer在任意时刻不能同时被读写,否则会引起数据错乱,无法控制数据,共享buffer里面的数据变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程按顺序访问变量。windows系统提供了使用互斥变量的函数。

 互斥变量的类型为CRITICAL_SECTION,首先定义一个互斥变量CRITICAL_SECTION cs;定义互斥变量就是创建一个临界区

系统提供4个相关函数

初始化互斥变量(初始化临界区):InitializeCriticalSection( &cs );

进入临界区:EnterCriticalSection( &cs);

离开临界区:LeaveCriticalSection( &cs );

删除临界区:DeleteCriticalSection( &cs );

在任意时刻有且仅有一个线程进入临界区,假如A线程已经进入临界区且未离开,接着B线程也想进入临界区,那么B线程在执行到EnterCriticalSection( &cs);这个语句时会被挂起,停止执行后面的程序,直到A线程离开临界区后,B线程才会恢复,然后执行后面的程序。

用户为了更加方便地使用互斥量,可以将系统函数封装成自己的类,并放到一个头文件中,如果想调用这个类包含这个头文件即可

下面代码就是在一个头文件中将系统函数封装成自己的类

#ifndef TINYCRITICALSECTION_LK       /
#define TINYCRITICALSECTION_LK

#include <windows.h>

class TinyCriticalSection       //类名
{
public:
	TinyCriticalSection()
	{
		InitializeCriticalSection( &cs );
	}

	void Lock()
	{
		EnterCriticalSection( &cs);
	}

	void Unlock()
	{
		LeaveCriticalSection( &cs );
	}

	~TinyCriticalSection()
	{
		DeleteCriticalSection( &cs );
	} 
private:
	CRITICAL_SECTION cs;
};

#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值