Memory barrier

?待續

Memory barrier,是一種屏障和一類指令,在執行這個屏障指令前后,CPU或者編譯器在內存操作上強制一個約束序列。CPU使用性能優化器可以導致執行代碼的無序。在單一線程執行中,重排序內存操作通常不會被注意。但是在并行編程或者設備驅動中會導致不可預料的行為。確切的排序約束是依賴于硬件的,并且有系統結構的內存模型所定義。一些結構提供多個屏障來強制不同的排序約束。內存約束通常使用在低級的機器碼中,用在多個設備中操作內存的時候。這些代碼包括在多處理器系統和硬件驅動開發中同步初始的鎖數據結構。

?

當程序運行在單一CPU上。硬件執行必須的記錄工作來保證程序按照程序員指定的序列順序執行,因此memory barriers鄙視必須的。但是,當內存由多個設備共享的時候,比如多個CPU系統,或者無序訪問可能影響程序的行為。比如第二個CPU可能看到內存由第一個CPU改變,其執行序列并不是程序規定的序列。

下面給出了一個具體的例子來說明無序執行怎樣影響程序的行為。初始的,內存地址x和f的值都是0,當f的值是0的時候,程序在處理器1上循環,然后打印出x的值。處理器2上的程序把值42存入x,把1存入f。下面是偽代碼片段,程序并行的在各個處理器上執行。

Processor #1:
loop:
load the value in location f, if it is 0 goto loop
print the value in location x
Processor #2:
store the value 42 into location x
store the value 1 into location f
你可能期望得到打印42。但是,如果處理器2的存儲操作執行無序,很可能f先于x被賦值,因此打印的結果可能是0。對于大多數程序來說這種情況是不能被接受的,在處理器2的賦值f語句之前,插入memory barrier來保證對于其他處理器,x的值優先于f值的改變。

?

多線程編程通常使用由高級語言環境提供的的同步機制,比如java和.net,或者API比如POSIX線程或者Win32。初始的比如Mutex和Semaphores用來在并行線程執行的時候同步訪問資源。這些通常都需要提供memory barriers來執行,來保證內存可視。在這種環境中,直接顯示調用memory barriers通常都不是必須的。

每個API或者程序環境在并行情況下都有自己的高級內存模型,來定義內存的可視語義。盡管程序員通常不需要在高級開發環境中使用memory barriers,理解內存可視語義也是很重要的。

















本文轉自cnn23711151CTO博客,原文鏈接:?http://blog.51cto.com/cnn237111/524552,如需轉載請自行聯系原作者





本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454028.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454028.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構與算法 Python語言描述 筆記

數據結構 線性表包括順序表和鏈表,python的list是順序表,鏈表一般在動態語言中不會使用。不過鏈表還是會出現在各種算法題中。 鏈表 link list 單鏈表 逆轉鏈表: leetcode 206雙鏈表循環單鏈表字符串 string 有一個重要的點就是字符串的匹配問…

Flask 跨域問題

一、什么是跨域 跨域是指:瀏覽器A從服務器B獲取的靜態資源,包括Html、Css、Js,然后在Js中通過Ajax訪問C服務器的靜態資源或請求。即:瀏覽器A從B服務器拿的資源,資源中想訪問服務器C的資源。 同源策略是指:…

Hibernate 中配置屬性詳解(hibernate.properties)

轉自:https://blog.csdn.net/shudaqi2010/article/details/70324843 Hibernate能在各種不同環境下工作而設計的, 因此存在著大量的配置參數。多數配置參數都 有比較直觀的默認值, 并有隨 Hibernate一同分發的配置樣例hibernate.properties 來展示各種配置選項。 所需…

1.3 使用電腦測試MC20的電話語音功能

需要準備的硬件 MC20開發板 1個https://item.taobao.com/item.htm?id562661881042GSM/GPRS天線 1根https://item.taobao.com/item.htm?id531979567261IPEX接口轉SMA接口轉接線 1根https://item.taobao.com/item.htm?id531979903836GPS有源天線 1根https://item.taobao.com/i…

前端之 AJAX

AJAX參數詳細列表 參數名類型描述urlString(默認: 當前頁地址) 發送請求的地址。typeString(默認: "GET") 請求方式 ("POST" 、 "GET")。注意:其它 HTTP 請求方法,如 PUT 和 DELETE ,但僅部分瀏覽器支持。tim…

buffer 和cache的區別

Cache:高速緩存,是位于CPU與主內存間的一種容量較小但速度很高的存儲器。 由于CPU的速度遠高于主內存,CPU直接從內存中存取數據要等待一定時間周期,Cache中保存著CPU剛用過或循環使用的一部分數據,當CPU再次使用該部分…

html5--1.18 div元素與布局

1.18 div元素與布局 1.元素的分類2.div元素與布局 1、元素的分類 塊元素:主要特征是會產生換行效果,自動與其他元素分離成兩行;通常可以作為容器在內部添加其他元素。已經學過的塊元素有: h1~h6;hr;ul;ol;p;table......... 內聯元素:不會產生…

python讀取excel表格太大怎么辦_Python:使用Openpyxl讀取大型Excel工作表

嘗試對load_workbook()類使用read_only True屬性,這會導致您獲得的工作表為IterableWroksheet,這意味著您只能迭代它們,您不能直接使用列/行號來訪問其中的單元格值.根據documentation,這將提供接近恒定的存儲器消耗.此外,您不需要關閉文件,語句將為您處理.示例 –import open…

五個優秀的視頻格式轉換工具

電腦、手機、DVD播放機、PSP……這么多的東西都可以播放視頻,但是視頻格式又千差萬別的,我們該怎么辦?這里,我們介紹五個功能強大且易于使用的媒體轉換器,用于轉換不同類型的視頻文件。 一、Super (Windows) Super是一…

前端之 HTML

HTML Web服務本質 import socketsk socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.send(b"<h1>Hello world!</h1>&…

接入指南

接入概述 接入微信公眾平臺開發&#xff0c;開發者需要按照如下步驟完成&#xff1a; 1、填寫服務器配置 2、驗證服務器地址的有效性 3、依據接口文檔實現業務邏輯 下面詳細介紹這3個步驟。 第一步&#xff1a;填寫服務器配置 登錄微信公眾平臺官網后&#xff0c;在公眾平臺官網…

艾賓浩斯記憶表格excel_Excel全年學習復習計劃表(艾賓浩斯遺忘曲線)

最近準備考在職博士&#xff0c;刷刷學歷&#xff0c;不得不又拿起必考的英語來&#xff0c;發現由于這幾年敲代碼&#xff0c;日常生活詞匯忘了很多&#xff0c;只好買本考博詞匯背誦&#xff0c;不過三十而立的人背起來確實費勁了&#xff0c;所以開始尋找好的背誦方法。又想…

七個幫助你處理Web頁面層布局的jQuery插件

1.UI.Layout jQuery UI布局插件官方網站&#xff1a;http://layout.jquery-dev.com/index.cfm使用大小可折疊的嵌套面板和大量選項創建高級UI布局。布局可以創建任何你想要的UI外觀; 從簡單的標題或側邊欄到具有工具欄&#xff0c;菜單&#xff0c;幫助面板&#xff0c;狀態欄…

前端之 CSS

CSS介紹 CSS&#xff08;Cascading Style Sheet&#xff0c;層疊樣式表)定義如何顯示HTML元素。 當瀏覽器讀到一個樣式表&#xff0c;它就會按照這個樣式表來對文檔進行格式化&#xff08;渲染&#xff09;。 CSS語法 CSS實例 每個CSS樣式由兩個組成部分&#xff1a;選擇器…

在Window下編譯OpenH323

前言&#xff1a; 本文只提供VC6.0的編譯說明&#xff0c;如果想知道VC.Net下的編譯過程請參看原文。 原文 &#xff1a; http://www.voxgratia.org/docs/pwlib_windows.html#msvc_headers 作者 &#xff1a;Craig Southeren 翻譯 &#xff1a; Richard 原文…

shell中的條件判斷和比較

1 shell 的$! ,$?, $$,$ $n $1 the first parameter,$2 the second... $# The number of command-line parameters. $0 The name of current program. $? Last command or functions return value. $$ The programs PID. $! …

matlab立體坐標定位_無懼密集建筑,小天才立體定位技術帶來最強定位體驗

如今&#xff0c;在可穿戴設備市場中&#xff0c;智能手表占據相當大一部分。而作為核心功能之一的定位&#xff0c;在智能手表中發揮著不可替代的作用&#xff0c;尤其是對于兒童電話手表而言。并且&#xff0c;在技術飛速進步&#xff0c;產品迭代加快的當前&#xff0c;兒童…

vue學習問題總結(一)

使用comopontent組件報錯錯誤信息&#xff1a;vue.js:491 [Vue warn]: Unknown custom element: <todo-item> - did you register the component correctly? For recursive components, make sure to provide the "name" option.代碼&#xff1a;<p>使用…

前端之 JavaScript 基礎

JavaScript 概述 ECMAScript 和 JavaScript的關系 1996年11月&#xff0c;JavaScript 的創造者 Netscape(網景) 公司&#xff0c;決定將 JavaScript 提交給國際標準化組織 ECMA &#xff0c;希望這門語言能夠成為國際標準。次年&#xff0c;ECMA發布262號標準文件&#xff08…

TCPMP0.72RC1的編譯與移植以及自己另外做UI完整方法

我叫張挺&#xff0c;雖然開博&#xff0c;除了轉了一篇黃色文章以外&#xff0c;技術文章從來沒有寫&#xff0c;所以呢&#xff0c;感到很不好意思&#xff01;于是決定還寫一篇在網上也留點痕跡。我這里主要是介紹TCPMP的移植以及如何把這個鳥鳥整到自己的界面中來&#xff…