ASYNCHRONOUS
用途
ASYNCHRONOUS 语句指定在作用域限定单元生效时哪些变量可以与暂挂 I/O 存储序列相关联。
您必须为 ASYNCHRONOUS用于异步通信的变量的属性。 详情请参阅异步通信中的可互操作变量。 
语法
- ioitem
- 是变量名
规则
可以使用 ASYNCHRONOUS I/O 语句中的变量隐式指定 ASYNCHRONOUS 属性。
对象可能在特定作用域限定单元中具有 ASYNCHRONOUS 属性,而不会在其他作用域限定单元中具有该属性。
如果对象具有 ASYNCHRONOUS 属性,那么其所有子对象都具有 ASYNCHRONOUS 属性。
即使相关联的模块实体不具有 ASYNCHRONOUS 或 VOLATILE 属性,该实体也可以在本地作用域限定单元中具有此属性。
所访问的实体可能具有 ASYNCHRONOUS 或 VOLATILE 属性,即使主机实体不具有此属性也是如此。
当且仅当选择器是变量且具有 ASYNCHRONOUS 属性时,关联实体才具有 ASYNCHRONOUS 属性。
示例
以下是可与暂挂 I/O 序列相关联的变量示例:
MODULE MOD
INTEGER :: IOITEM
END MODULE
PROGRAM MAIN
CALL SUB1()
CALL SUB2()
END PROGRAM
SUBROUTINE SUB1() ! OPTIMIZATION MAY NOT BE PERFORMED
USE MOD
ASYNCHRONOUS :: IOITEM
....
END SUBROUTINE
SUBROUTINE SUB2() ! OPTIMIZATION MAY BE PERFORMED
USE MOD
.....
END SUBROUTINE
! OPTIMIZATION IS NOT POSSIBLE IN SUB2()IF MODULE MOD IS REWRITTEN AS FOLLOWS:
MODULE MOD
INTEGER, ASYNCHRONOUS :: IOITEM
END MODULE

INTEGER :: ARRAY(1000)
... ! Code that writes to ARRAY
BLOCK
ASYNCHRONOUS :: ARRAY
CALL MPI_ISEND(ARRAY,...REQ,...)
... ! Code that does not write to ARRAY
CALL MPI_WAIT(REQ,...)
END BLOCK
... ! Code that writes to ARRAY
