【问题标题】:c - global variables in pthreadsc - pthreads 中的全局变量
【发布时间】:2017-06-30 23:22:01
【问题描述】:

假设我在文件function.c中定义了一个函数,在main.c中我创建了多个pthread来执行function.c中的函数。

如果在function.c中,我定义了一个全局变量,例如int foo;

那么,我的问题是,每个线程都有自己的这个变量“foo”的实例还是共享一个“foo”?

【问题讨论】:

  • 全局变量在所有线程之间共享。

标签: c scope pthreads


【解决方案1】:

全局变量是一个范围在整个 *.c 文件中的变量。它们可以在同一文件中的任何位置访问。

线程是轻量级进程,但 在多线程进程(或多线程文件)中,所有线程协同工作,为相关进程提供不同的 2 功能。 因此,由于它们不是独立进程,因此它们以全局方式访问全局变量。

在 pthread 中定义的局部变量可以在声明它们的线程中进行本地访问。

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

【讨论】:

    【解决方案2】:

    它们共享一个 foo 变量。全局变量在每个进程中始终只存在一次,通常由互斥锁保护以避免并发访问。

    从 C11 开始,您可以使用 thread_local 将变量声明为每个线程的本地变量:

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

    【讨论】:

    • 如果一个变量在函数内部被定义为一个局部静态变量,每个pthread会有它自己的这个变量的实例吗?
    • @RaymondZhang :局部静态变量与全局变量几乎相同,只是可见性有限。所以不,它也会被所有线程共享。
    猜你喜欢
    • 2011-08-31
    • 2015-06-12
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多