适用于Android/iOS的TMultiReadExclusiveWriteSynchronizer等效方案咨询
跨平台等效Windows版
TMultiReadExclusiveWriteSynchronizer组件解决方案 在除Windows外的所有平台上,
TMultiReadExclusiveWriteSynchronizer本质为TSimpleRWSync,其内部仅通过TMonitor.Enter/TMonitor.Exit实现同步,该实现存在明显缺陷:同一时间仅支持一个读访问。
存在可直接使用的同类组件,也可以根据版本场景选择适配方案:
- Delphi 10.4 Sydney及以上版本可以直接使用官方原生提供的
TMREWSync组件,该组件完全兼容Windows版TMultiReadExclusiveWriteSynchronizer的所有接口,原生支持Android、iOS平台,实现了标准读写锁语义,支持多并发读、独占写,不存在非Windows平台旧实现的单读限制问题。 - 若使用低于10.4的旧版本Delphi,可以手动实现轻量跨平台读写锁,核心实现逻辑如下:
- 用原子操作维护读计数器、写请求标记两个核心变量
- 读操作进入前先校验无待处理写请求,原子累加读计数即可进入访问,访问结束后原子递减读计数
- 写操作进入前先原子标记写请求,等待所有在读操作全部退出后进入独占访问,访问结束后清除写请求标记
- 可搭配条件变量优化写饥饿问题,保证写操作的调度优先级
- 两种方案的调用逻辑都和原Windows版
TMultiReadExclusiveWriteSynchronizer完全一致,原有业务代码不需要调整加锁、解锁逻辑,仅替换实例化的类名即可完成Android/iOS平台适配。
内容的提问来源于stack exchange,提问作者zeus
相关产品推荐
相关产品推荐

