领先的中文IT技术网站    IT技术从现在起飞

飞诺旗下: 技术社区 | 在线电子书 | 在线试题 | 资源下载 | 飞诺搜索 | 技术博客
用户名: 密   码:
   飞诺网 加入收藏
飞诺网 Asp.net 新闻频道 开发频道 系统频道 服务器 网络频道 网络安全 Java频道 C/C++ PHP开发 电子书 资源下载 社 区 博 客 在线试题
网站开发 VBScript ASP Asp.net Jsp php XML CGI-Perl 搜索引擎 ajax
编程开发 JAVA C/C++ C++ VC C语言 VB C# Delphi Foxpro 汇编 shell编程 游戏开发 软件工程师 WEB开发 PHP ASP Asp.net JSP AJAX CGI JavaScript HTML CSS 数据库 MSSQL Mysql Oracle Access Sybase DB2 sql2005 Office Word Excel Powerpoint Wps 认证考试 二级C语言 三级网络 程序员 网络工程师 思科认证

您当前的位置:飞诺网 >> .net >> Asp.net实例教程

OpenMP与C++:事半功倍地获得多线程的好处(下)

www.firnow.com    时间 : 2008-07-09  作者:佚名   编辑:本站 点击:   [ 评论 ]

用以同步的编译器指令

       在多个线程并发的时候,某一线程常常会需要同步其它线程。OpenMP支持多种类型的同步,以在不同的情境下解决问题。

       其中之一就是暗含的barrier同步。在每一个并行区域都有一个暗含的barrier,用以同步并行区域中的所有线程。一个barrier同步要求所有线程执行到此,然后才能往下执行。

       #pragma omp for#pragma omp single#pragma omp sections程序块都有暗含的barrier同步。从上述三种工作共享的程序块中去除暗含的barrier同步的方法是增加nowait子句:

       #pragma omp parallel

{

    #pragma omp for nowait

    for(int i = 1; i < size; ++i)

        x[i] = (y[i-1] + y[i+1])/2;

}

如你所见,工作共享指令中的nowait子句指明线程不需要在for循环结束时同步,尽管线程将在并行区域结束处同步。

       另一种是明确声明barrier同步,在一些情境下你可能需要在并行区域出口之外放置barrier同步,这时你可以在代码里加一个#pragma omp barrier指令。

       临界区能够像barrier那样使用,在Win32 API中通过EnterCriticalSectionExitCriticleSection来进出临界区。OpenMP通过#pragma omp critical [name]指令给予程序员同样的能力。这与Win32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

如果图片或页面不能正常显示请点击这里
Asp.net实例教程推荐文章

文章评论

BBS社区热贴