ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

boost官方文档同步机制Synchronization mechanisms overview

2020-12-19 18:31:04  阅读:250  来源: 互联网

标签:同步 映射 overview mechanisms Synchronization 线程 内存 进程 实用程序


参考链接

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

标签:同步,映射,overview,mechanisms,Synchronization,线程,内存,进程,实用程序
来源: https://blog.csdn.net/CHYabc123456hh/article/details/111408224

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有