簡體   English   中英

在線程中設置全局變量

[英]Setting Global variables in thread

我需要一個字符串作為全局變量。 多個線程可以設置全局變量。 我應該為此尋求互斥嗎? 或OS將處理此類操作。 使用互斥鎖會影響應用程序性能。

我並不擔心行動的順序。 我害怕數據損壞。 有人可以讓我知道這個。

聽起來你理解所有的擔憂。 如果全局變量可能已損壞,則肯定需要將其鎖定在互斥鎖中。 這將影響性能,因為根據定義,這部分現在將是同步的。 話雖這么說,您將希望根據需要鎖定代碼的最小部分,以最大限度地減少調用同步代碼的時間。

你的全局變量是什么? 指向字符串緩沖區或緩沖區本身的指針?

在許多體系結構(包括AFAIR 32位x86)上,覆蓋單個指針是原子的。

此示例可能有效:

volatile char **global_var;

void set_var(char *str) {
    char *tmp = strdup(str);
    global_var = &tmp;
}

您可以使用線程局部存儲
不幸的是,它沒有在當前的C99標准中指定,但可能會在C1X中出現。 目前,您可以使用特定於編譯器的實現(GCC,ICC和Visual C都有)。

就標准而言,是的,您必須使用互斥鎖。 如果不這樣做會導致未定義的行為。 實際上,大多數機器架構都沒有問題。 C標准(C1x)的未來版本將具有原子類型,如果在這里使用,肯定會使得沒有鎖定的分配安全(盡管可能使用內部鎖定,在缺乏真實原子的破壞的拱門上)。

暫無
暫無

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

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