假设我在文件function.c中定义了一个函数,在main.c中我创建了多个pthread来执行function.c中的函数。
如果在function.c中,我定义了一个全局变量,例如int foo;
然后,我的问题是,每个线程都有自己的变量“foo”的实例,还是它们共享一个“foo”?
答案 0 :(得分:3)
他们共享一个foo
变量。全局变量每个进程只存在一次,并且通常受互斥锁保护以避免并发访问。
从C11开始,您可以使用thread_local将变量声明为每个线程的本地:
#include <threads.h>
...
thread_local int perThreadInt;
答案 1 :(得分:2)
全局变量是变量。其范围在整个* .c文件中......无论它们在同一文件中使用的哪个位置都可以访问...
线程是非常重要的过程但是 在多线程进程(或多线程文件)所有线程协同工作,为相关进程提供diffrent-2功能。 所以,因为他们不是独立过程所以他们以全球方式访问全局变量...
pthreads中定义的局部变量在声明它们的线程中是本地可访问的。
任何线程都不知道另一个线程的局部变量。