openMP私有变量

wuye1986 2011-07-09 03:24:54
下面这段程序

int i=0;
int a=1;
#pragma omp parallel for private(i,a)
for(i=0;i<5;i++)
{
a ++;
printf("Thread %d has a value of a = %d for i = %d\n",
omp_get_thread_num(),a,i);
}

输出结果为什么是:
Thread 0 has a value of a = 4078209 for i = 0
Thread 1 has a value of a = 1 for i = 3
Thread 0 has a value of a = 4078210 for i = 1
Thread 1 has a value of a = 2 for i = 4
Thread 0 has a value of a = 4078211 for i = 2

双核机器,在线程 0 上难道变量a就没有初始化吗?
...全文
181 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuye1986 2011-07-09
  • 打赏
  • 举报
回复
原来用private子句声明的私有变量在并行区域的入口处是未初始化的,使用之前必须赋初值,否则编译运行时会报错;即并行区域内的变量与原同名变量没有任何关系,只是名字相同而已,要继承同名变量的值,在并行区域入口处用firestprivate
wuye1986 2011-07-09
  • 打赏
  • 举报
回复
期待。。。。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧