STATIC (IBM 延伸)
用途
STATIC 屬性指定變數具有靜態儲存類別; 亦即,在程式執行期間,該變數會保留在記憶體中,且其值會在對程序的呼叫之間保留。
語法
- stat_variable
- 是變數名稱或陣列宣告元,可指定 explicit_shape_spec_list 或 deferred_shape_spec_list。
- 起始值
- 為緊接在前的名稱所指定的變數提供起始值。 起始設定如 資料中所述。
規則
如果 stat_variable 是結果變數,則它不得是字元類型或衍生類型。 虛擬引數、自動物件及稜角不得有 STATIC 屬性。 以 STATIC 屬性明確宣告的變數不能是一般區塊項目。
變數在相同的範圍設定單元中不得多次指定 STATIC 屬性。
區域變數具有自動的預設儲存類別。 請參閱 XL Fortran Compiler Reference 中的 -qsave 選項 ,以取得有關呼叫指令的預設值詳細資料。
宣告為 STATIC 的變數會在執行緒之間共用。 如果要對包含共用變數的應用程式進行安全執行緒作業,您必須使用鎖定來序列化對靜態資料的存取權,或使資料成為特定執行緒。 使資料成為執行緒特定的方法之一,是將靜態資料移至已宣告 THREADLOCAL的 COMMON 區塊中。 Pthreads 程式庫模組提供 mutexes ,可讓您使用鎖定來序列化對資料的存取權。 如需相關資訊,請參閱 XL Fortran Optimization and Programming Guide 中的 Pthreads library module 。 CRITICAL 指引上的 lock_name 屬性也提供序列化資料存取權的能力。 如需相關資訊,請參閱 CRITICAL /END CRITICAL 。 THREADLOCAL 指引可確保共用區塊位於每一個執行緒的本端。 如需相關資訊,請參閱 THREADLOCAL 。
| ALLOCATABLE 1 | 指標 | 儲存 |
| 非同步 | 專用 | 目標 |
| 連續 2 | 受保護 1 | 暫時 |
| 維度 (dimension) | ||
附註:
|
||
範例
LOGICAL :: CALLED=.FALSE.
CALL SUB(CALLED)
CALLED=.TRUE.
CALL SUB(CALLED)
CONTAINS
SUBROUTINE SUB(CALLED)
INTEGER, STATIC :: J
LOGICAL :: CALLED
IF (CALLED.EQV..FALSE.) THEN
J=2
ELSE
J=J+1
ENDIF
PRINT *, J ! Output on first call is 2
! Output on second call is 3
END SUBROUTINE
END
