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.pswp.cn/news/446855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446855.shtml
英文地址,請注明出處:http://en.pswp.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 內邊距只有容器才有,即里面要有視圖 具體示例