- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件事务内存
事务内存
基本概念
事务内存(Transactional Memory,TM)是一种并行程序设计的方式,它模拟数据库事务的并发控制机制来控制在并行计算时对共享内存的访问控制。它是锁的一种代替机制。
事务的概念源自数据库管理系统(DBMS)中的数据库事务的概念。在数据库管理系统中,事务必须满足ACID性质,即原子性,一致性,隔离性和持久性。
·原子性是指事务中的动作要么全部被执行,要么一个都不执行;
·一致性是指在任何时刻,数据库都必须处于一致的状态,即必须满足某些预先设置的条件;
·隔离性是指一个事务不能看见其它未递交事务所涉及到的内部对象的状态;
·持久性则是指一个己经递交的事务对数据库系统的改变必须是永久的;
在事务内存中,一个事务指的是一段读、写共享内存的代码,这些读写操作在逻辑上是一个独立的单元,其中间状态对其它事务而言不可见。由于其针对的是内存,便没有了对持久性的要求,前面的ACI性质仍然保持。
当前的事务内存研究主要有三个方向:基于硬件实现的事务内存(Hardware Transactional Memory,HTM)、基于软件实现的事务内存(Software Transactional Memory,STM)以及软硬件结合的混合性事务内存(Hybrid Transactional Memory,HyTM)。
·HTM由于使用硬件实现,速度最快,性能最好,并行粒度一般是基于字或者基于Cache行;
·STM在编程语言基础上实现支持,速度最慢,性能最差,但是灵活性和扩展性最好;
·HyTM是将软件和硬件结合起来的混合实现,性能在两者之间;
软件事务内存
基于软件的事务内存一般是通过软件运行库或是在程序语言级上提供事务内存的语义接口,基本上对硬件要求非常低(一般只需要硬件提供像CAS这样的原子操作)甚至没有要求。
相对硬件事务内存而言,基于软件实现的事务内存有着明显的灵活性和扩展性。尽管性能不如硬件的实现,但由于它的硬件的要求非常低,不需要特殊硬件就可以完成,对于当今流行的多核处理器而言,使用软件事务内存来释放并行计算的潜能是非常有研究价值的。
基本概念
软件事务内存(STM)是在一种多线程之间数据共享的同步机制。对于并行计算编程而言,只要将线程中需要访问共享内存的关键逻辑部分划分出来封装到一个事务中即可,编程人员不再需要关心相关的同步一致性问题,全部交由事务内存系统来出处理。
一个典型的共享内存事务由一系列的操作构成,根据事务的特性,这些内存操作要么被全部完整的执行(事务递交),要么全部操作无效(事务取消或者回滚)。
事务内存系统要求保证操作的原子性和独立性。原子性要求事务必须被完整执行或不被执行,独立性则要求在事务递交前,外部不能得知事务内部的状态,即中间不稳定态。
软件事务内存的语义描述
软件事务内存需要为程序员提供编程接口以便能够方便的使用。下面列出软件事务内存一般需要提供的接口:
1、开始事务(Begin)
表示一个事务的开始。系统开始对接下来的数据访问进行一致性检测,提前为事务的失败做必要的准备以便发生失败时能够进行回滚。
2、审核(Verity)
确保正在运行中的事务没有和其他事务发生任何冲突。这个动作是否被自动执行,取决于系统的设计。
3、事务递交(Commit)
表示一个事务的结束。系统要么将整个事务确认成功,要么将整个事务回滚到事务开始状态。如果事务被确认成功递交,则所有事务中对共享数所做的修改都将被正确更新。
4、事务回滚(Rollback)
如果一个事务被回滚,则事务中所有修改过的共享内存数据结果都会被取消。
5、事务的读操作(Read)
事务使用读操作来获取共享内存中指定位置的内容。在事务运行过程中,如果别的事务修改了该内存并递交成功,一般这个事务要能够被通知到自己所读取的内容已经失效。具体的实现机制因STM的设计而有所不同。
6、事务的写操作(Write)
事务对共享内存中指定位置进行内容修改。修改后的内容只有在事务被成功递交后才会真正生效,在没有递交前,对于其它事务而言,这个修改是不可见的。
7、事务打开对象操作(Open)
事务通过打开操作来获取对一个共享内存中的对象的引用,以便后继对其进行读写操作。这个操作通常用在基于对象的STM系统中。
8、事务关闭对象操作(Close)
事务通过关闭操作来释放对一个共享对象的引用。这个操作通常是在基于对象的STM系统用的。
共享内存的修改过程
在通常的并发系统中,一般都是在共享内存的基础上多个线程在并发运行,线程间的通讯是通过共享内存而不是函数调用,因此我们有必要弄清楚一个共享内存变量在程序被赋值的变化时序过程。
首先我们来看看下面一个C语言的程序片段;
temp=*p; //备份*p的值
*p=0; //对*p赋值为0
*p=t
文档评论(0)