ACE Lock类介绍
锁类属包含的类包装简单的锁定机制,比如互斥体、信号量、读/写互斥体和令牌等。这里我就以互斥体为例简单的介绍一下其使用方法,对其它的锁类进行一些简单的说明。
1.互斥体的使用。
互斥体用于保护共享的易变代码,也就是全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。
在ACE中可以通过ACE_Thread_Mutex实现线程的访问互斥,下面的例子演示ACE_Thread_Mutex类的使用。
#include "ace/Thread.h"
#include "ace/Synch.h"
#include <iostream>
using namespace std;
ACE_Thread_Mutex mutex;
static int number=1;
void* Thread1(void *arg)
{mutex.acquire();ACE_OS::sleep(3);cout<<endl<<"hello thread1"<<number++<<endl;mutex.release();return NULL;
} void* Thread2(void *arg)
{mutex.acquire();cout<<endl<<"hello thread2"<<number++<<endl;mutex.release();return NULL;
} int main(int argc, char *argv[])
{ ACE_Thread::spawn((ACE_THR_FUNC)Thread1);//Thread2 比Thread1晚创建1秒钟,故后尝试获取互斥体ACE_OS::sleep(1);ACE_Thread::spawn((ACE_THR_FUNC)Thread2);while(true)ACE_OS::sleep(10);return 0;
}
在使用ACE Lock类属时一定注意锁的获取以及释放,
ACE_Thread_Mutex主要有两个方法:
- acquire():用来获取互斥体,如果无法获取,将阻塞至获取到为止。
- release():用来释放互斥体,从而使自己或者其它线程能够获取互斥体。
当线程要访问共享资源时,首先调用acquire()方法获取互斥体,从而获取对改互斥体所保护的共享资源的唯一访问权限,访问结束时调用释放互斥体,使得其它线程能获取共享资源的访问权限。
在此例中,本来Thread2的打印消息在Thread1之前,但由于Thread1先获得互斥体,故Thread2只有待Thread1结束后才能进入临界区。读者朋友们可以通过将ACE_Thread_Mutex替换为ACE_NULL_Mutex看一下不加锁的执行结果。如果不加锁的话容易产生脏数据,出现数据相同的问题
ACE Lock类介绍相关推荐
- Hbase API中常用类介绍和使用
网上Hbase的介绍有很多,案例也不少.自己写了个Demo,进行一些简单的总结. HBase 常用类介绍. JAVA API 和 HBase数据库模型之间的关系 JAVA 类 Hbase 数据模型 H ...
- C#中的Dictionary字典类介绍(转载)
C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典 作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/ ...
- Java中BigDecimal类介绍及用法
Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...
- C++/C--istringstream、ostringstream、stringstream 类介绍【转载】
文章目录 1 C++的输入输出分为三种: 1.1 基于控制台的I/O 1.2 基于文件的I/O 1.3 基于字符串的I/O 2 头文件 3 功能 4 具体分析 4.1 istringstream类 4 ...
- Java核心类库-IO-File类介绍和路径分割符
Java的IO:类和接口存在于Java.io包中 讲IO操作之前,必须要先讲File类(文件/目录) File类介绍和路径分割符: File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径. 该类包 ...
- Android Canvas类介绍和Android Draw Rect 坐标图示
当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- POI 导出导入工具类介绍
介绍: Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...
- JAVA synchonized Lock类----简单总结笔记
1.synchronized是java 内置关键字,Lock为一个 类. 2.synchronized 隐式得到锁,隐式释放锁,故而,运用起来更加方便,快捷. 3.Lock类如下: public in ...
最新文章
- R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(配置显示的分组)实战(dot plot)
- Java如何判断今天本月第几周的周几?
- volatile 关键字
- Springboot跨域 ajax jsonp请求
- chrome控制台如何把vw显示成px_【CSS】rem,em,px的区别和使用场景
- YOLO v3 安装并训练自己数据
- 理论 | 教你彻底学会Java序列化和反序列化
- python模块typing的作用
- SAP License:2021年最新FICO面试答案
- Android开发笔记(序)写在前面的目录
- 苹果从来不飙配置,也从不关注配置,即使一般的配置也能卖好价钱,为啥没人喷?
- java小软件_JAVA小应用程序 。。。。。。。。。。。
- 物联网-移远m26使用MQTT协议,AT指令对接阿里云
- 3蛋白wb_99% 的实验小白都会收藏,WB、ELISA、IHC 进阶攻略
- python脚本windows环境下权限问题处理
- CreateProcess创建一个隐藏进程
- 16进制转10进制 nodejs_Js字符串与十六进制的相互转换 【转】
- 2016全球与中国市场DIN导轨式电源深度研究报告
- 一个金蝶网址的网络爬虫
- 如何解决QQ在线客服未启用问题