- 主题:请教一个openmp并行的问题
我的主程序是A.exe,要并行调用B.dll中的函数,B.dll又会调用C.dll,并且B.dll和C.dll都有全局变量。这种情况该如何避免数据竞争?
我对B.dll和C.dll中的全局变量都加了threadprivate,还是会出错
谢谢
--
修改:guest007 FROM 124.64.18.*
FROM 124.64.18.*
这是数据相关了,只能给这个全局变量外面加锁了。
【 在 guest007 (007) 的大作中提到: 】
: 我的主程序是A.exe,要并行调用B.dll中的函数,B.dll又会调用C.dll,并且B.dll和C.dll都有全局变量。这种情况该如何避免数据竞争?
: 我对B.dll和C.dll中的全局变量都加了threadprivate,还是会出错
: 谢谢
: ...................
--
FROM 211.95.56.*
谢谢,没有办法把全局变量线程私有化吗?
【 在 hoodlum 的大作中提到: 】
: 这是数据相关了,只能给这个全局变量外面加锁了。
:
--
FROM 124.64.18.*
你用全局/静态变量的意思,就是所有并发的线程看到的都是同一个东西。
只有临时变量才是线程私有的。
我也不是什么专家,我说的也不一定对,仅供参考。
【 在 guest007 (007) 的大作中提到: 】
: 谢谢,没有办法把全局变量线程私有化吗?
--
修改:hoodlum FROM 211.95.56.*
FROM 211.95.56.*
C++11的thread_local 不就是干这事的么
【 在 guest007 (007) 的大作中提到: 】
: 谢谢,没有办法把全局变量线程私有化吗?
--
FROM 123.116.61.157
threadprivate跟这个不一样是吧,threadprivate说是可以将全局变量线程私有化,我这里不好使。
【 在 jjfz 的大作中提到: 】
: C++11的thread_local 不就是干这事的么
:
--
FROM 124.64.18.*
thread_local就是static变量线程专有化啊
【 在 guest007 (007) 的大作中提到: 】
: threadprivate跟这个不一样是吧,threadprivate说是可以将全局变量线程私有化,我这里不好使。
--
FROM 123.116.61.157
避免竞争,要么改代码别用全局变量,要么加锁
【 在 guest007 (007) 的大作中提到: 】
: 我的主程序是A.exe,要并行调用B.dll中的函数,B.dll又会调用C.dll,并且B.dll和C.dll都有全局变量。这种情况该如何避免数据竞争?
: 我对B.dll和C.dll中的全局变量都加了threadprivate,还是会出错
: 谢谢
: ...................
--
FROM 115.171.245.*