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主要有两个方法:

  1. acquire():用来获取互斥体,如果无法获取,将阻塞至获取到为止。
  2. release():用来释放互斥体,从而使自己或者其它线程能够获取互斥体。

当线程要访问共享资源时,首先调用acquire()方法获取互斥体,从而获取对改互斥体所保护的共享资源的唯一访问权限,访问结束时调用释放互斥体,使得其它线程能获取共享资源的访问权限。

在此例中,本来Thread2的打印消息在Thread1之前,但由于Thread1先获得互斥体,故Thread2只有待Thread1结束后才能进入临界区。读者朋友们可以通过将ACE_Thread_Mutex替换为ACE_NULL_Mutex看一下不加锁的执行结果。如果不加锁的话容易产生脏数据,出现数据相同的问题

ACE Lock类介绍相关推荐

  1. Hbase API中常用类介绍和使用

    网上Hbase的介绍有很多,案例也不少.自己写了个Demo,进行一些简单的总结. HBase 常用类介绍. JAVA API 和 HBase数据库模型之间的关系 JAVA 类 Hbase 数据模型 H ...

  2. C#中的Dictionary字典类介绍(转载)

    C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  3. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  4. 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 ...

  5. Java核心类库-IO-File类介绍和路径分割符

    Java的IO:类和接口存在于Java.io包中 讲IO操作之前,必须要先讲File类(文件/目录) File类介绍和路径分割符: File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径. 该类包 ...

  6. Android Canvas类介绍和Android Draw Rect 坐标图示

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  7. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  8. POI 导出导入工具类介绍

    介绍: Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...

  9. JAVA synchonized Lock类----简单总结笔记

    1.synchronized是java 内置关键字,Lock为一个 类. 2.synchronized 隐式得到锁,隐式释放锁,故而,运用起来更加方便,快捷. 3.Lock类如下: public in ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(配置显示的分组)实战(dot plot)
  2. Java如何判断今天本月第几周的周几?
  3. volatile 关键字
  4. Springboot跨域 ajax jsonp请求
  5. chrome控制台如何把vw显示成px_【CSS】rem,em,px的区别和使用场景
  6. YOLO v3 安装并训练自己数据
  7. 理论 | 教你彻底学会Java序列化和反序列化
  8. python模块typing的作用
  9. SAP License:2021年最新FICO面试答案
  10. Android开发笔记(序)写在前面的目录
  11. 苹果从来不飙配置,也从不关注配置,即使一般的配置也能卖好价钱,为啥没人喷?
  12. java小软件_JAVA小应用程序 。。。。。。。。。。。
  13. 物联网-移远m26使用MQTT协议,AT指令对接阿里云
  14. 3蛋白wb_99% 的实验小白都会收藏,WB、ELISA、IHC 进阶攻略
  15. python脚本windows环境下权限问题处理
  16. CreateProcess创建一个隐藏进程
  17. 16进制转10进制 nodejs_Js字符串与十六进制的相互转换 【转】
  18. 2016全球与中国市场DIN导轨式电源深度研究报告
  19. 一个金蝶网址的网络爬虫
  20. 如何解决QQ在线客服未启用问题

热门文章

  1. 【老孙随笔】属相影响你的职业前途吗?
  2. android radiooptions简介
  3. Windows配置jdk环境变量JAVA_HOME与path
  4. (十四)访问标志 Access_flags
  5. Swoft 源码剖析 - Swoft 中的注解机制
  6. RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能
  7. Makefile学习笔记-备忘
  8. MSCOCO数据集分析
  9. 软件架构设计原则和大数据平台架构层
  10. Leetcode 116. 填充每个节点的下一个右侧节点指针 解题思路及C++实现