跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:OpenMP API 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
注意,在将来的版本中,任务自动确定作用域规则和自动确定作用域的结果可能会有所更改。而且,隐式确定作用域规则和自动确定作用域规则的应用顺序在将来的发行版中也会发生更改。
程序员使用 _auto(list-of-variables) 子句或 default(_auto) 子句显式请求自动确定作用域。为 parallel 构造指定 default(_auto) 或 _auto(list-of-variables) 子句,并不意味着将同一子句应用于在语法上或动态包含在 parallel 构造中的 task 构造。
在对没有预先确定隐式作用域的变量自动确定作用域时,编译器会按给定顺序根据上述规则来检查变量的使用。如果符合某个规则,编译器将按照匹配的规则确定变量的作用域。如果没有匹配的规则或自动确定作用域无法处理变量(如下节所述,由于存在某些限制),则编译器会将变量的作用域确定为 SHARED,并将 parallel 或 task 构造视为如同指定了 IF (.FALSE.) 或 if(0) 子句一样。
通常,由于以下两个原因之一,自动确定作用域功能会失败。一个原因是使用的变量不匹配任何规则。另一个原因是源代码对于编译器来说过于复杂,因而无法执行全面的分析。函数调用、复杂的数组下标、内存别名和用户实现的同步都是常见原因。