OpenMP Tutorial学习笔记(9)OpenMP指令之THREADPRIVATE指令

OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#THREADPRIVATE

(1)指令作用:

threadprivate指令用于指定文件范围的全局变量成为线程在多个并行块之间执行的本地变量或持久变量。

简单的理解,对于一些全局变量,可以用此指令指定全局变量,使得每一个线程都能有此全局变量的独立的拷贝,并且互相不影响。其实,可以理解为多线程中的“线程本地存储(TLS)".

(2)指令格式和使用:

#pragma omp threadprivate (list)
其中list为全局变量,所以,在使用这个指令前,list中的变量要先声明。在第一次进入并行区域的时候,要注意变量为undefined,除非使用了一些子句赋值(后面会学习这些子句)。另外,threadprivate指令和private子句也是不一样的(后面会学习)。

下面是一个使用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);
}
运行结果:

OpenMP Tutorial学习笔记(9)OpenMP指令之THREADPRIVATE指令_第1张图片

(3)指令限制:

注意:在使用threadprivate的时候,要关闭动态线程的属性,才能保证结果正确。

你可能感兴趣的:(thread,多线程,list,存储,parallel)