ACE框架 同步原语设计
ACE框架常用的同步机制设计成统一的原语接口。同步原语使用系统平台(操作系统,多线程库)提供的同步原语,并为系统平台不提供的同步原语提供模拟实现。ACE框架使用了外观模式和适配器分两层,将同步原语统一接口。
在外观包装层,ACE框架为每种同步原语将系统平台不同的同步原语函数统一成一致的函数接口集,并提供系统平台不支持的同步原语的模拟的实现。这一层位于ACE_OS命名空间层。

ACE框架定义了7种系统平台需要提供的同步原语,包括有条件变量,事件,互斥体(锁),线程锁,可递归锁,读写锁以及信号量。
并没有一个系统平台支持所有的同步原语,并且不同系统平台的原语函数各不相同。在这层ACE框架为这些同步原语函数定义了统一的外观。
Windows平台支持事件,互斥体(锁)Mutext,线程锁 CriticalSection,可递归锁CriticalSection,信号量Semaphore,但不支持条件变量,读写锁。
Solaris平台支持互斥体(锁)mutex_t,信号量sema_t,条件变量cond_t,读写锁rwlock_t,但并不支持事件,可递归锁。
Linux平台,操作系统只提供信号量sem_t同步原语的系统调用,其它同步原语必须依赖线程库Pthread。
线程库Pthread,实现了互斥体(锁)pthread_mutex_t,条件变量pthread_cond_t,读写锁pthread_rwlock_t,并提供一个信号量的模拟实现,但不支持事件,可递归锁。
ACE为不支持的同步原语提供了实现模拟,分别有事件ACE_event_t,条件变更ACE_cond_t,事件ACE_event_t,以及信号量ACE_sema_t。
Windows平台的同步原语外观实现:(红色为ACE定义的同步对象外观,黄色为实现)

Linux平台的外观实现:

虽然为7种同步原语各自统一了函数外观,但使用起来还很繁杂,不同的同步原语之间的函数不兼容,并且不利于开发中同步原语的替换。在适配层,ACE使用相同的接口包装了每种同步原语的使用,并且使同步原语轻易地使用在模板泛型开发。

ACE_Barrier是更高一层的同步原语。
ACE框架 同步原语设计的更多相关文章
- ACE框架 基于共享内存的分配器 (算法设计)
继承上一篇<ACE框架 基于共享内存的分配器设计>,本篇分析算法部分的设计. ACE_Malloc_T模板定义了这样一个分配器组件 分配器组件聚合了三个功能组件:同步组件ACE_LOCK, ...
- C#并行编程-线程同步原语
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- ACE框架 基于共享内存的进程间通讯
ACE框架将基于共享内存的进程间通讯功能,如其它IO组件或IPC组件一样,设计成三个组件.流操作组件ACE_MEM_Stream,连接器组件ACE_MEM_Connector,以及接收连接组件ACE_ ...
- ACE框架 基于共享内存的分配器
ACE框架提供了一个内存分配器模板,并且提供了(仅且)一个模板实例,基于共存内存的内存分配器.这个共存内存分配器模板实例在ACE框架应用于,基于内存映射的进程通讯,以及进程间同步等. ACE内存分配器 ...
- [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计
本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...
- python线程同步原语--源码阅读
前面两篇文章,写了python线程同步原语的基本应用.下面这篇文章主要是通过阅读源码来了解这几个类的内部原理和是怎么协同一起工作来实现python多线程的. 相关文章链接:python同步原语--线程 ...
- python--线程同步原语
Threading模块是python3里面的多线程模块,模块内集成了许多的类,其中包括Thread,Condition,Event,Lock,Rlock,Semaphore,Timer等等.下面这篇文 ...
- python同步原语--线程锁
多线程锁是python多种同步原语中的其中一种.首先解析一下什么是同步原语,python因为GIL(全局解析锁)的缘故,并没有真正的多线性.另外python的多线程存在一个问题,在多线程编程时,会出现 ...
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
如何在Visual Studio 2017中使用C# 7+语法 前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...
随机推荐
- 解决此问题:Oracle 删除用户时报 “必须指定 CASCADE 以删除 'SE'”,
这说明你要删除的oracle 用户"SE" 下面还有数据库对象,如 table, view 等,这样你删除用户时必须加选项 cascade:drop user se cascade ...
- 解决ubuntu更新中断后报错问题
今天在更新ubuntu的时候,更新了一半被我强制关闭了,就报错了 当再使用sudo apt-get update命令时出现了dpkg was interrupted,you must manually ...
- angular element()
使用angular.element()获取一个dom的方法. 1.可以使用jquery的选择器 2.可以使用javascript的原生的的查找元素的方法 下面是angular.element()提供的 ...
- CentOS 中 YUM 安装桌面环境(转)
使用 yum groupinstall 指令很容易就能安装上图形界面的桌面系统. 1. yum 的 group 指令 yum 可以以程序组的模式来安装成套的软件包.支持的软件包可以通过, # yum ...
- ThreadLocal本地线程变量的理解
一般的Web应用划分为展现层.服务层和持久层三个层次,在不同的层中编写对应的逻辑,下层通过接口向上层开放功能调用.在一般情况下,从接收请求到返回响应所经过的所有程序调用都同属于一个线程. ...
- CA/B Forum: SSL证书最长有效期最终被定为两年
这项新规将在2018年实施...... 随着CAB Forum第193号投票的通过,SSL行业将拥有更新更短的最长SSL证书有效期. 作为SSL行业的风向标,CAB Forum制定过许多行业规则,及规 ...
- windows_keyboard shortcuts快捷键
单独按Windows:显示或隐藏"开始"功能表 Windows+BREAK:显示"系统属性" 对话框 Windows+D:显示桌面 Windows+M:最小化所 ...
- Linux学习之sudo命令
在学习Linux用户管理时,我们不得不需要了解一个命令,那就是sudo.sudo的作用是切换身份,以其他身份来执行命令. 那么为什么在Linux系统中我们需要来切换身份呢?原因有以下几个方面 1.养成 ...
- 【前端童鞋看过来!】给大家分享网盘里前端相关书籍,主要是和网络通信(HTTP/TCP/IP)及javascript相关的
百度云链接:https://pan.baidu.com/s/1kUPdf5H(无密码) 截图: <HTTP权威指南> [豆瓣书评]:此书第一部分是HTTP的概略,如果你没有时间,通读第一部 ...
- JS中的bind的实现以及使用
在讨论bind()方法之前我们先来看一道题目: var altwrite = document.write; altwrite("hello"); //1.以上代码有什么问题 // ...