随笔 - 211  文章 - 0  评论 - 50  阅读 - 32万

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是更高一层的同步原语。

posted on   bbqz007  阅读(317)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2016-04-14 自制反汇编逆向分析工具 迭代第五版本 (一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示