簡體   English   中英

C99中本地靜態數組的線程安全

[英]Thread safety of local static array in C99

以下是線程安全的,因為每個數組元素只能由一個線程訪問(包括此處未顯示的實際部分):

static bool myArray[THREAD_COUNT] = {false}; // Only used in DoSomething()

void DoSomething(uint8_t threadIndex)
{
   myArray[threadIndex] = true;
   // Real world function is more complex
}

現在考慮以下代碼:

void DoSomething(uint8_t threadIndex)
{
   static bool myArray[THREAD_COUNT] = {false};
   myArray[threadIndex] = true;
   // Real world function is more complex
}

此函數是否也是線程安全的(特別是考慮到在函數的第一次調用而不是啟動時進行的數組初始化)?

它是安全的。 程序啟動前,所有具有靜態存儲持續時間的對象均已初始化。 這意味着甚至在任何線程開始發揮作用之前。

5.1.2執行環境

定義了兩個執行環境:獨立和托管。 在這兩種情況下,當執行環境調用指定的C函數時,都會發生程序啟動。 程序啟動前,所有具有靜態存儲持續時間的對象都應初始化(設置為其初始值)。 否則未指定這種初始化的方式和時間。 程序終止將控制權返回到執行環境。

(強調我的)。

C99沒有線程的概念。 但這就是我從標准中解釋以上引用的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM