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
  • 文件锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓布局中xml文件属性和ID简介

编写xml属性 加载xml资源 当编译应用时,系统会将每个xml文件编译为view资源 属性 xml属性:特有属性,共有属性,其他属性(布局参数) ID ——在结构树中对view对象唯一标识 编译应用后,系统以…

Java监控工具VisualVM

目录一、简介二、内存分析1、Heap堆三、CPU分析四、线程分析一、简介 VisualVM 是一款免费的,集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力,对Java应用程序做 性能分析和调优 。这些功能包括 生成和分析海量数据、跟踪内…

对官方Mutexes的翻译

参考链接 参考链接 Mutexes Whats A Mutex?Mutex OperationsBoost.Interprocess Mutex Types And HeadersScoped lockAnonymous mutex exampleNamed mutex example Whats A Mutex? 互斥是相互排斥的意思,它是进程之间最基本的同步形式。互斥保证只有一个线程可…

计算机应用基础

计算概论知识点 1.计算机之父:冯.诺伊曼 计算机基本组成:运算器,控制器,存储器,输入设备,输出设备 2.几种计算机:台式计算机,笔记本式计算机,PC服务器,平板式计算机… 3.电脑的硬件:…

Android最全UI库合集

目录抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新ViewPager图表(Chart)菜单(Menu)浮动菜单对话框空白页滑动删除手势操作RecyclerViewCardColorDrawableSpinner布局模糊效果TabBarAppBar选择器(Picker)跑马灯日历时间主题样式ImageView通知聊天…

对于boost锁机制结论性的介绍

Conditions Whats A Condition Variable?Boost.Interprocess Condition Types And HeadersAnonymous condition example Whats A Condition Variable? 在前面的例子中,一个mutex被用来锁定,但我们不能用它来有效地等待,直到满足继续的条件…

C++数据类型

C 数据类型 |–基本数据类型: 整型 short短整型 2 int基本整型4 long长整型 8 浮点型 float单精度型 4 double双精度型 8 long double长双精度型 16 字符型 char 1 逻辑型 bool 1 空类型 void |–构造类型 数组类型 构造体类型 struct 共用体类型 union 枚举类型 enum 类类型…

Android Gradle 多渠道打包、动态配置AppName

目录一、简介二、Gradle多渠道打包1、普通做法2、Gradle多渠道打包一、简介 因为国内Android应用分发市场的现状,我们在发布APP时,一般需要生成多个渠道包,上传到不同的应用市场。这些渠道包需要包含不同的渠道信息,在APP和后台交…

boost锁机制中Semaphores的介绍

结构 Whats A Semaphore?Boost.Interprocess Semaphore Types And HeadersAnonymous semaphore example Whats A Semaphore? 旗语是一种基于内部计数的进程间同步机制,它提供了两种基本操作。等待:测试旗语数的值,如果小于或等于0&#x…

Android Gradle 批量修改生成的apk文件名

目录一、简介二、代码实现1、 Gradle 3.0以下版本2、Gradle 3.0以上版本一、简介 平时开发都知道,我们要上线的时候需要在Android studio打包apk文件,可是默认的打包名是app-release.apk或者app-debug.apk这样的名字,太没有辨识度了。 下面…

C++boost Class named_condition翻译

Class named_condition boost::interprocess::named_condition 简介 // In header: <boost/interprocess/sync/named_condition.hpp>class named_condition { public:// construct/copy/destructnamed_condition(create_only_t, const char *, const permissions &…

Android Studio 代理设置以及代理完全清除

目录一、代理设置二、代理完全清除一、代理设置 首先我们来看下怎样设置代理&#xff0c;Mac下打开【Preferences…】&#xff0c;然后搜索"HTTP"&#xff0c;选择【HTTP Proxy】&#xff0c;按图中设置配置好后&#xff0c;点击【Apply】&#xff0c;然后在点击【O…

安卓布局位置,dp与px的区别

手机6寸—指对角线 布局位置 横轴—x轴 纵轴—y轴 一个像素点 dp与Px dp:设备无关像素,与像素密度相关,像素距离 dpi:像素密度,每英寸包含的像素数 px:屏幕上一个物理像素点 ldpi低密度 1dp0.75px mdpi中密度 1dp1px hdpi高密度 1dp1.5px xhdpi超高密度 1dp2px xxhdpi超…

Android Studio 快捷键大全(Mac系统)

目录一、Mac上的按键符号二、快捷键查找/查看相关控制操作相关代码重构相关一、Mac上的按键符号 符号说明⌥option / alt⇧shift⌃control⌘command⎋esc 二、快捷键 查找/查看相关 快捷键说明双击 shift搜索任意内容command F / command R当前文件查找/替换&#xff0c;使…

ubuntu下clion软件连接boost库文件

整体配置 cmake_minimum_required(VERSION 3.17) project(mutex_learn)set(CMAKE_CXX_STANDARD 14) #boost库所在的根目录set(BOOST_ROOT "/usr/local/include/boost") #添加头文件搜索路径 include_directories(/usr/local/include) #添加库文件搜索路径 link_dir…

Android程序结构

Project方式 .gradle文件夹:编译相关生成 .idea文件夹:idea生成 app文件夹----应用程序的源代码和资源 build----编译后的文件存放的位置,最终apk文件存放的位置 libs:存放.jar和.so文件 src:AndroidTest与test存放测试相关的内容 main中Java文件夹存放Java源码,res文件…

通过Github创建Android库供其他项目依赖引用

目录一、简介二、实现第一步&#xff1a;将自己的项目托管到Github上。第二步&#xff1a;点击releases。第三步&#xff1a;创建release。第四步&#xff1a;填写版本号、名称、描述信息。第五步&#xff1a;点击【Publish release】。第六步&#xff1a;复制项目路径。第七步…

使用boost模板函数实现读写锁

介绍 shared_mutex即读写锁&#xff0c;不同与我们常用的独占式锁mutex&#xff0c;shared_mutex是共享与独占共存的锁&#xff0c;实现了读写锁的机制&#xff0c;即多个读线程一个写线程&#xff0c;通常用于对于一个共享区域的读操作比较频繁&#xff0c;而写操作比较少的情…

安卓内边距padding与外边距magrin

内边距padding与外边距margin 内边距只有容器才有,即里面要有视图 具体示例