2017-02-13 40 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的功能.. ,因为他们不是独立过程,使他们在一个全球性的方式访问全局变量...在并行线程定义

局部变量是在本地入店它们被声明的线程。

任何线程都不知道另一个线程的局部变量