预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共126页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

12367891011121314151617182122232425MFC线程同步的实现27282930AutoResetEventClass:这个类可以通知一个或多个线程发生事件。 ManualResetEventClass:这个类也用来通知一个或多个线程事件发生了。它的状态可以手动的被设置和重置。 InterlockedClass:提供了在线程之间共享的变量访问的同步,它的操作是原子操作,且被线程共享。 ReaderWriterLockclass:它定义了一种锁,提供唯一写/多读的机制,使得读写的同步 lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下: ObjectthisLock=newObject(); lock(thisLock) { //Criticalcodesection }33343536373839406.1.1体系结构426.1.2OpenMP编程基础444546编译指导语句48两种编程方式的优缺点5051使用VisualStudio2005编写OpenMP程序53545657585960616263数据相关的概念数据相关的概念数据相关的概念6768697071在使用作用域子句的时候要遵循如下的一些规则: 作用域子句作用的变量是已经申明的有名变量; 作用域子句在作用到类或者结构的时候,必须作用到类或者结构的整体,而不能只作用于类或者结构的一个部分; 一个编译指导语句能够包含多个数据作用域子句,但是变量只能出现在一个作用域子句中,即变量不能既是共享的,又是私有的; 在语法结构上,作用域子句只能作用在出现在编译指导语句起作用的语句变量部分。另外,可以将作用域子句作用在类的静态变量上。747576使用reduction子句进行多线程程序设计时,要记住以下三个要点: 在第一个线程到达指定了reduction子句的共享区域或循环末尾时,原来的规约变量的值变为不确定,并保持此不确定状态直至规约计算完成; 如果在一个循环中使用到了reduction子句,同时又使用了nowait子句,那么在确保所有线程完成规约计算的栅栏同步操作前,原来的规约变量的值将一直保持不确定的状态; 各个线程的私有副本值被规约的顺序是未指定的。因此,对于同一段程序的一次串行执行和一次并行执行,甚至两次并行执行来说,都无法保证得到完全相同的结果(这主要针对浮点计算而言),也无法保证计算过程中诸如浮点计算异常这样的行为会完全相同。私有变量的初始化和终结操作798081828384856.2.2并行区域编程6.2.2并行区域编程6.2.2并行区域编程6.2.2并行区域编程909192并行区域之间的工作共享并行区域之间的工作共享9596并行区域之间的工作共享9899100101102103104105106107108109110111112113114115116117118119120121122123124125126