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.mzph.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…