【发布时间】:2017-06-30 23:22:01
【问题描述】:
假设我在文件function.c中定义了一个函数,在main.c中我创建了多个pthread来执行function.c中的函数。
如果在function.c中,我定义了一个全局变量,例如int foo;
那么,我的问题是,每个线程都有自己的这个变量“foo”的实例还是共享一个“foo”?
【问题讨论】:
-
全局变量在所有线程之间共享。
假设我在文件function.c中定义了一个函数,在main.c中我创建了多个pthread来执行function.c中的函数。
如果在function.c中,我定义了一个全局变量,例如int foo;
那么,我的问题是,每个线程都有自己的这个变量“foo”的实例还是共享一个“foo”?
【问题讨论】:
全局变量是一个范围在整个 *.c 文件中的变量。它们可以在同一文件中的任何位置访问。
线程是轻量级进程,但 在多线程进程(或多线程文件)中,所有线程协同工作,为相关进程提供不同的 2 功能。 因此,由于它们不是独立进程,因此它们以全局方式访问全局变量。
在 pthread 中定义的局部变量可以在声明它们的线程中进行本地访问。
任何线程都不知道另一个线程的局部变量。
【讨论】:
它们共享一个 foo 变量。全局变量在每个进程中始终只存在一次,通常由互斥锁保护以避免并发访问。
从 C11 开始,您可以使用 thread_local 将变量声明为每个线程的本地变量:
#include <threads.h>
...
thread_local int perThreadInt;
【讨论】: