互斥量的封装
来源:互联网 发布:java jsonarray 编辑:程序博客网 时间:2024/06/06 02:48
很多项目涉及多线操作,多个线程访问共享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
0 0
- 互斥量的封装
- C++ 互斥量的封装
- 使用互斥量封装的类
- 封装机制封装的概念
- 封装:树形节点的封装
- 实现linux的互斥量c++封装
- 实现linux的互斥量c++封装
- 简单的jdbc封装+servlet的封装
- 工具类的封装-sharePreference的封装
- 封装性是指对外部的封装
- 强大的封装标签封装类
- 什么是封装,封装类的使用!
- java的封装(如何封装类)
- alertController的封装(在TYAlertController基础上封装)
- 工具类的封装--Log封装
- 工具类的封装--SharedPreferences封装
- 封装尺寸与封装的对应关系
- 什么是javascript封装,封装的方法有几种
- POJ1163-The Triangle(数字三角形)
- bundled software
- spark厦大-----逻辑斯蒂回归分类器--spark.mllib
- React-Native测试
- Java 发起http GET POST请求实例
- 互斥量的封装
- myeclipse中部署复制的java web项目报错:Errors running builder “Integrated External Tool Builder” on project
- 2. Add Two Numbers
- AOJ-problem-851
- SQL2005 第一次配置没有服务器名称的问题
- 30天自制操作系统中edimg的含义
- Unreal Open Day 2017 参会总结与心得
- C++ 常函数
- 安卓图片压缩