boost官方文档同步机制Synchronization mechanisms overview
参考链接
- 官方文档
Synchronization mechanisms overview
- Named And Anonymous Synchronization Mechanisms
- Types Of Synchronization Mechanisms
- 如前所述,如果不能有效地同步对内存的访问,那么通过内存映射文件或共享内存对象在进程之间共享内存的能力就不是很有用。这和线程同步机制的问题是一样的,线程之间共享堆内存和全局变量,但对这些资源的访问通常需要通过mutex和条件变量进行同步。Boost.Threads实现了同一进程内线程之间的这些同步工具。Boost.Interprocess实现了类似的机制来同步不同进程的线程。
Named And Anonymous Synchronization Mechanisms
- Boost.Interprocess提供了两种类型的同步对象。
- 命名的实用程序。当两个进程想要创建这种类型的对象时,两个进程必须使用相同的名称创建或打开一个对象。这类似于创建或打开文件:一个进程使用名称为 filename 的 fstream 创建一个文件,另一个进程使用具有相同 filename 参数的另一个 fstream 打开该文件。每个进程都使用不同的对象来访问资源,但两个进程使用的是同一个底层资源。适用于不同进程之间对于相同文件的操作
- 匿名实用程序。由于这些实用程序没有名字,两个进程必须通过共享内存或内存映射文件来共享同一个对象。这与传统的线程同步对象类似。两个进程共享同一个对象 与线程同步不同的是,在线程同步中,同一进程的线程之间共享全局变量和堆内存,而来自不同进程的两个线程之间只能通过映射同一可映射资源的映射区域(例如共享内存或内存映射文件)共享对象。适用于同一进程不同线程之间对于相同文件的操作
- 每种类型都有自己的优缺点。
- 对于简单的同步任务来说,命名的实用程序更容易处理,因为两个进程都不需要创建一个共享内存区域并在那里构建同步机制。
- 当使用内存映射对象获得同步实用程序的自动持久化时,匿名实用程序可以被序列化到磁盘上。人们可以在内存映射的文件中构造一个同步实用程序,重新启动系统,再次映射文件,然后再次使用同步实用程序,而不会有任何问题。这一点在命名同步实用程序中是无法实现的。
- 命名实用程序和匿名实用程序的主要接口区别在于构造函数。通常匿名实用程序只有一个构造函数,而命名实用程序有多个构造函数,其第一个参数是请求创建、打开或打开或创建底层资源的特殊类型。
using namespace boost::interprocess;//Create the synchronization utility. If it previously
//exists, throws an error
NamedUtility(create_only, ...)//Open the synchronization utility. If it does not previously
//exist, it's created.
NamedUtility(open_or_create, ...)//Open the synchronization utility. If it does not previously
//exist, throws an error.
NamedUtility(open_only, ...)
- 另一方面,只能创建匿名同步实用程序,进程必须使用其他机制同步,谁创建实用程序。
using namespace boost::interprocess;//Create the synchronization utility.
AnonymousUtility(...)
同步机制的类型
- 除了命名/匿名的特性之外,Boost.Interprocess还提供了以下同步实用程序。
- Mutexes(命名和匿名)
- 条件变量(命名和匿名)
- Semaphores (named and anonymous)
- 可升级的mutexes
- 文件锁
boost官方文档同步机制Synchronization mechanisms overview相关推荐
- 使用cephadm部署单节点ceph集群,后期可扩容(基于官方文档,靠谱,读起来舒服)
目录 ceph各种部署工具比较(来自官方文档的翻译,靠谱!) 材料准备 cephadm使用条件 服务器有外网访问能力 服务器没有外网访问能力 安装cephadm cephadm的功能 两种安装方式 基 ...
- 《Redis官方文档》用Redis构建分布式锁
<Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...
- 《Spring Cloud Netflix官方文档》2. 服务发现:Eureka服务器
2. 服务发现:Eureka服务器 2.1 如何创建Eureka服务器 引用org.springframework.cloud的spring-cloud-starter-eureka-server就可 ...
- dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成
狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习.未经作者授权,禁止转载 分布式理论 什么是分布式系统? 在<分布式系统原理与范 ...
- AsyncDisplayKit官方文档个人翻译
迁移老文章到掘金 文档比较老了,不适用最新的2.0 AsyncDisplayKit 官方文档 最近在拆解学习AsyncDisplayKit这个很知名的轮子,发现这个轮子内容还是非常庞大的,想要分解学习 ...
- Spring 4 官方文档学习 Spring与Java EE技术的集成
本部分覆盖了以下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Ent ...
- 【官方文档】Fluent Bit 数据管道之输入插件(Tail)
文章目录 1. 配置参数 2. 多行支持 2.1. 多行核心 (v1.8) 2.2. 多行和容器 (v1.8) 2.3. 旧的多行配置参数 2.4. 旧的 Docker 模式配置参数 3. 入门指南 ...
- (翻译)Apache Kafka 官方文档:开始
Apache Kafka 官方文档:开始 入门 Kafka 作为一个分布式的流平台,这到底意味着什么? 首先来了解一下 Kafka 所使用的基本术语: 主题和日志(Topic 和 Log) 分布式(D ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion
本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...
最新文章
- python软件包自带的集成开发环境-实验一 熟悉Python的集成开发环境
- arduino代码运行时间测试函数,代码性能运行时间测试方法
- 【编译原理】文法的基本概念
- JavaWeb笔记04-解决GET与POST乱码问题
- 北大博士的论文发表经验:快写、细改、慢投
- 腾讯云:一句话语音识别API接入步骤和说明
- Express框架是什么
- Silverlight/WPF/WP7一周学习导读(12月6-12月12)
- table实现radio单选效果
- Python神经网络是这样识别手写字符哒?
- python实现ks算法_Python绘制KS曲线的实现方法
- 云开工第一天,视频会议哪家强?
- 详解,python求矩阵的秩,你肯定能看懂
- HDU-4540 威威猫系列故事——打地鼠 (动态规划)
- java update 8_java 8 update 77可以删除吗
- 微信小程序保姆级入门教程
- google引擎地址
- 优盘删除恢复,小牛数据恢复
- 阿里P8架构师谈:高并发与多线程的关系、区别、以及高并发的系统解决方案
- i基准指令集 mips_MIPS指令集整理
热门文章
- tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐
- python的river安装
- DDMMSS.SS转为DD
- 【转】基于DCMTK的DICOM相关程序编写攻略
- 【转】WM_MESSAGE、WM_COMMAND、WM_NOTIFY等消息有什么不同
- asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
- 【Python学习】 - Pandas学习 sort_value( ),sort_index( )排序函数的区别与使用
- 算法讲解 -- 区间dp经典模型与优化(石子归并)
- 【POJ - 2376】Cleaning Shifts (贪心)
- 服务器不显示u盘,服务器不读u盘启动