c++临界区域-加锁
来源:互联网 发布:java divide 参数 编辑:程序博客网 时间:2024/06/06 04:07
#include<windows.h>class CCritSection{friend class CLock;public:CCritSection(){InitializeCriticalSection(&_critSect);}~CCritSection(){DeleteCriticalSection(&_critSect);}void Acquire(){EnterCriticalSection(&_critSect);}void Release(){LeaveCriticalSection(&_critSect);}private:CRITICAL_SECTION _critSect;};class CLock{public:CLock(CCritSection _critSection) :m_critSection(_critSection){m_critSection.Acquire();}~CLock(){m_critSection.Release();}private:CCritSection m_critSection;};
觉得这段代码的好处是加锁时只需要新建一个CLock对象时构造函数自动进入临界区,通过析构函数自动退出临界区,不用写UnLock()之类的接口退出临界区,不用担心忘了UnLock()。
那传入CLock的自定义临界区对象应该是全局的吧,因为多线程共享这个临界区,才可以实现谁占领它谁就有权先使用从而多线程实现异步。还有一个是如果在一个函数内希望指定锁的有效范围,则需要特意加上{},栈对象超出最近的 } 则调用析构函数从而达到退出临界区域的目的。
例如:
Test.cpp//未测试
CCritSection g_critSection;//全局
void Test()
{
//do something
//开始写入文件,多线程写同一个文件则需要加锁
{
CLock(g_critSection);
//to do write operation
}
//do other thing
}
特意加上{}总觉得代码不好看,不知道有什么别的办法,好像也咩有~~
0 0
- c++临界区域-加锁
- C/C++ Windows API——多线程加锁与临界区域
- 临界区域
- 临界区域问题
- 临界区域问题【2】
- 使用临界区(Critical sections)给临界资源加锁
- 线程同步之临界区域
- Critical Section(关键区域,临界区域)
- object-c 多线程 加锁
- object-c 多线程 加锁
- Critical Section Objects(临界区域)的使用
- unix c文件加锁解锁
- 加锁
- 加锁
- 加锁
- 加锁
- 加锁
- 加锁
- Android中网络通信的几种方式
- 从此走上一条iOS程序猿不归路。。。
- 产生随机数的两种方法
- JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
- ios 开发学习日志 自定义animation 1
- c++临界区域-加锁
- 购物车项目(一)——编写商品类
- Java单例和Properties加载*.properties文件
- Date和String类型之间的转换,通过Calendar类求出年龄
- Android自定义带圆点的半圆形进度条
- 冒泡排序(C语言版)
- Android仿外卖购物车的实现
- Java中读取配置文件的方式
- XCODE中使用Main.Storyboard拉入控件并实现事件(Swift语言)