【问题标题】:can global variables be accessed by two threads?两个线程可以访问全局变量吗?
【发布时间】:2020-11-09 14:21:26
【问题描述】:

我正在尝试使用 eclipse IDE 在 c 编程中实现队列,我有两个线程,第一个是生产者,第二个是消费者,它将处理数据和日志文件

我将使用生产者线程中的入队函数

void enqueue(int *q,int *tail, int element){ q[(*tail)++] = element;}

和从消费者线程出列函数

int dequeue(int *q,int *head){return q[(*head)++];}

那么我可以同时使用入队和出队吗? 它会导致我的代码出现任何问题吗?

【问题讨论】:

  • 基于队列是临界区,所以要注意线程对共享资源的访问。
  • 如果消费者线程调用出队但生产者线程还没有入队会发生什么?
  • 至于你在标题中的问题:“是”。线程只是通过代码的执行路径。多线程意味着同时执行多个路径,通过相同的代码,因此可以访问相同的数据。
  • 您需要确保只有一个线程可以修改资源。例如使用互斥锁。

标签: c multithreading queue


【解决方案1】:

两个线程可以访问全局变量吗?

当然可以,因为同一个process的几个threads共享一个virtual address space

细节当然是operating system具体的。

我假设你有一些 Linux 操作系统。

您可能应该使用锁定或同步工具。使用POSIX threads,查看pthread_mutex_initpthread_mutex_lock,以及pthread_condvar_init等相关函数

您想阅读 C11 标准 n1570

您想阅读compiler 的文档,例如GCCClang 的文档。您可能还应该阅读您的linker,例如GNU binutils 的文档。

您想阅读 build automation 工具的文档,例如GNU makeninja

您需要阅读调试器的文档,可能是GDB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多