免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8595 | 回复: 5
打印 上一主题 下一主题

openmp多线程调用同一个函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-02 02:16 |只看该作者 |倒序浏览
一个openmp多线程c++程序,要在程序中多个线程同时调用一个函数的话,会出现问题吗? 测试结果总和单线程的结果不一致,但是差别很小,不知道为什么。示例代码如下:


#ifdef OPENMP
  omp_set_num_threads(NUM_THREADS); // multhreads for  
#pragma omp parallel for
#endif


for (i=0; i<10; i++)
{

test_function();

}

test_function()里面定义了很多种数据类型,例如:

test_function()
{
  
  int a[10];
  char *seq;
  ..........
  
}

这样直调用会出问题吗?

多谢指点!

论坛徽章:
0
2 [报告]
发表于 2009-05-02 10:23 |只看该作者
没试过,要不设置为私有看看,不知道里面的数据结构是否会被公用

论坛徽章:
0
3 [报告]
发表于 2009-05-02 10:53 |只看该作者

回复 #2 daybreakcx 的帖子

测试过了,不会被公用,每个进程都会有一个副本,但是如果是定义为static的话好像就不行了。

论坛徽章:
0
4 [报告]
发表于 2009-05-02 11:19 |只看该作者
看这个地址里面介绍吧:http://software.intel.com/zh-cn/ ... openmp-programming/
它里面说:“在默认情况下,堆栈上声明的变量为私有变量,但 C/C++ 关键词 static 会改变将放在全局堆上的变量,从而使其被 OpenMP 循环共享。”

论坛徽章:
0
5 [报告]
发表于 2011-09-07 20:59 |只看该作者
调用同一个函数时,存在数据竞争。在调用相同的那函数前加入#pragma omp critical结果就对了

论坛徽章:
0
6 [报告]
发表于 2014-06-04 15:54 |只看该作者
应该私有化
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP