【发布时间】: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