2017-02-13 105 views
3

假設我在文件function.c中定義了一個函數,並在main.c中創建了多個pthread來執行函數function.c。c - pthreads中的全局變量

如果在function.c中,我定義了一個全局變量,例如int foo;

然後,我的問題是,每個線程都有自己的這個變量「foo」的實例還是共享一個「foo」?

+0

全局變量在所有線程之間共享。 – kaylum

回答

2

它們共享一個foo變量。全局變量每個進程始終只存在一次,通常受互斥鎖保護,以避免併發訪問。

由於C11可以使用thread_local聲明變量爲每個線程本地:

#include <threads.h> 
... 
thread_local int perThreadInt; 
+0

如果一個變量被定義爲函數內部的局部靜態變量,每個pthread都有它自己的這個變量的實例麼? – zanyman

+0

@RaymondZhang:局部靜態變量幾乎與全局變量相同,只是能見度有限。所以不,它也會被所有主題共享。 –

2

全球var是一個變種。其範圍是整個* .c文件中..他們可以入店,無論他們在同一個文件中使用...

線程是多線程處理(或一個多線程文件)lieghtweight過程,但 所有線程協同工作對於相關的過程,以便提供不同勢-2的功能.. ,因爲他們不是獨立過程,使他們在一個全球性的方式訪問全局變量...在並行線程定義

局部變量是在本地入店它們被聲明的線程。

任何線程都不知道另一個線程的局部變量