task 指令采用以下数据共享属性子句,这些子句可定义任务的数据环境:
default (private | firstprivate | shared | none)
private (list)
firstprivate (list)
shared (list)
在任务内对 shared 子句中列出的变量的所有引用是指在遇到 task 构造时已知的同名变量。
对于每个 private 和 firstprivate 变量,都会创建一个新存储,并且对 task 构造词法范围内的原始变量的所有引用都会被对新存储的引用所替换。遇到任务构造时,将会使用原始变量的值初始化 firstprivate 变量。
OpenMP 规范介绍了并行、任务或工作共享构造中所引用变量的数据共享属性如何确定。
构造中引用的变量的数据共享属性可以是以下属性之一:预先确定、显式确定或隐式确定。特定变量有预先确定的数据共享属性;例如,parallel for/do 构造中的循环迭代变量是专用变量。具有显式确定数据共享属性的变量是那些在给定构造中引用,并在构造的数据共享属性子句中列出的变量。具有隐式确定数据共享属性的变量是那些在给定构造中引用、不具有预先确定数据共享属性,并且不在构造的数据共享属性子句中列出的变量。