《并行计算的编程模型》一2.3.4 锁与中断

简介: 本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.4节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3.4 锁与中断

在2.2.2节中,讲到GASNet可以在客户端并行执行AM处理程序,即使客户端是单线程的。而且多线程客户端在执行过程中需要避免并行调用GASNet的屏障函数。因此本节将重点介绍GASNet的控制并发机制。
GASNet提供了专门的接口处理线程安全性,由于存在多线程执行GASNet的可能,这种接口对于单线程客户端非常重要。其中主要的机制是一个简单的互斥锁,称作“处理程序安全锁”或“HSL”,数据类型为基于互斥锁类型的gasnet_hsl_t类型。目的是为了确保该互斥锁类型适合于给定的程序实现(其中包括GASNet客户端与其实现都为单线程时无操作的情况)。

除了GASNet规范中提及的细节描述外,上述函数与pthread_mutex_t中的常量、函数非常相似。同POSIX线程一样,这些操作能够防止对数据结构或代码进行并行访问。关于互斥锁的使用方法不在本章讨论的范围之内。需要注意的是,上述操作为节点本地的互斥锁,且GASNet没有提供跨节点互斥处理机制。但是2.6.5节的示例将会讲到如何使用AM实现一个著名的互斥共享内存算法。
除前文中介绍的用于执行客户端AM处理程序的内部线程方法之外,GASNet规范允许出现中断驱动实现情况。虽然写本书时尚未出现这样的应用实现,但是这里简要地介绍一下相关概念。

上述的两个函数通常成对使用,它们定义了线程上不能被AM处理程序执行过程中断的代码段。这与使用HSL方式避免多线程并行访问给定代码或数据有较大的不同。无中断部分主要用于保护可能由客户端处理程序和非处理程序访问的非重入客户端代码。无中断部分使用较少有两个主要原因:(1)使得HSL能够隐式访问无中断部分;(2)AM处理程序在隐式无中断部分执行。注意如果存在动态循环嵌套操作,那么上述函数不必嵌套,因此客户端主要负责无中断部分。
在使用GASNET_SEQ构建时,当且仅当GASNet实现既不使用线程也不使用内部中断执行客户端处理程序时,不需要编译互斥调用。

相关文章
|
5月前
|
算法 Java Linux
线程的魔法:揭开现代操作系统并发执行的面纱
线程的魔法:揭开现代操作系统并发执行的面纱
56 0
|
6月前
|
数据采集 Python
Python多线程与异步IO的对比:何时选择哪种并发模型
Python多线程与异步IO的对比:何时选择哪种并发模型
328 1
|
6月前
|
存储
RTOS多线程操作的基本原理与实现
RTOS多线程操作的基本原理与实现
223 0
|
安全 Linux 内存技术
Linux驱动开发——并发和竞态(概念介绍①)
Linux驱动开发——并发和竞态(概念介绍①)
143 0
Linux驱动开发——并发和竞态(概念介绍①)
|
Linux
Linux驱动开发——并发和竞态(中断屏蔽方式的使用②)
Linux驱动开发——并发和竞态(中断屏蔽方式的使用②)
137 0
Linux驱动开发——并发和竞态(中断屏蔽方式的使用②)
|
Linux
Linux驱动开发——并发和竞态(原子操作方式的使用⑤)
Linux驱动开发——并发和竞态(原子操作方式的使用⑤)
168 0
Linux驱动开发——并发和竞态(原子操作方式的使用⑤)
|
安全 Linux
Linux驱动开发——并发和竞态(自旋锁方式的使用③)
Linux驱动开发——并发和竞态(自旋锁方式的使用③)
115 0
Linux驱动开发——并发和竞态(自旋锁方式的使用③)
|
测试技术 调度 C语言
大并发下的高性能编程 – 改进的(用户态)自旋锁
前言 多线程程序中,锁的使用往往成为系统性能的关键。在做地址可视化项目的时候,由于内存管理部分需要频繁的更新内存的引用计数,所以产生了使用自旋锁的想法,这篇文章我们从自旋锁的性能开始说起,由浅入深的给出了一种改进的自旋锁的实现。
1730 0
|
Python 安全 C++
python多线程同步实例分析
python多线程同步实例分析进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清。一方面除了工作中可能用的比较少,另一方面就是这些概念牵涉到的东西比较多,而且相对较深。
1095 0
|
Java 异构计算
Java并发编程之概念一:并行与并发
Java并发编程之概念一:并行与并发概念解释并行性和并发性是既相似又有区别的两个概念。 并行性是指两个或多个事件在同一时刻发生。 而并发性是指连个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机环境下(一个处理器),每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。
2349 0