gpt4 book ai didi

c - 在 Visual Studio 中使用 threadprivate 指令

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:18 25 4
gpt4 key购买 nike

Visual Studio 2010 中的 OpenMP 实现似乎有一个严重的错误,不允许将外部变量作为 threadprivate。以下代码将无法编译:

文件.c


#include <omp.h>

/* Declaration of external variable. */

extern int My_Var;

#pragma omp threadprivate (My_Var)

void MyFunc(void) { My_Var = 1;}

错误信息是:

error C3053:
'My_Var' : 'threadprivate' is only valid for global or static data tems.

很明显,编译器对变量的链接属性感到困惑。

在多个文件中引用全局变量是最常见的。所以这个问题使得 threadprivate 指令在任何实际程序中都无法使用。

不知道有没有什么技巧可以解决这个bug。不幸的是,就我而言,这个问题阻止了我完全使用 OMP。

谢谢,

亚历克斯

最佳答案

这似乎(又一次)违反了 VC++ 编译器中的 OpenMP 标准。幸运的是,VC++ 中的 threadprivate 子句直接作为 thread __declspec 属性的应用程序实现,您可以简单地替换:

extern int My_Var;

#pragma omp threadprivate (My_Var)

extern __declspec(thread) int My_Var;

仍然必须在所有翻译单元中为 My_Var 提供相同的 __declspec(thread) 属性(或 #pragma omp threadprivate pragma)声明的位置(根据 OpenMP 规范也有要求 - “OpenMP 2.0”规范的第 2.7.1 节)。

关于c - 在 Visual Studio 中使用 threadprivate 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com