OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#THREADPRIVATE
(1)指令作用:
threadprivate指令用于指定文件范围的全局变量成为线程在多个并行块之间执行的本地变量或持久变量。
简单的理解,对于一些全局变量,可以用此指令指定全局变量,使得每一个线程都能有此全局变量的独立的拷贝,并且互相不影响。其实,可以理解为多线程中的“线程本地存储(TLS)".
(2)指令格式和使用:
- #pragma omp threadprivate (list)
下面是一个使用threadprivate的例子:
- #include "stdafx.h"
- #include <omp.h>
- int g;
- #pragma omp threadprivate(g)
- int main(int argc, char *argv[])
- {
- /* Explicitly turn off dynamic threads */
- omp_set_dynamic(0);
- printf("Masterthread started\n\n");
- #pragma omp parallel
- {
- g = omp_get_thread_num();
- printf("tid: %d\n",g);
- } // End of parallel region
- #pragma omp parallel
- {
- int temp = g*g;
- printf("tid : %d, tid*tid: %d\n",g, temp);
- } // End of parallel region
- printf("Masterthread finished\n");
- return(0);
- }
(3)指令限制:
注意:在使用threadprivate的时候,要关闭动态线程的属性,才能保证结果正确。