如何在Linux中实现队列的并发控制

avatar
作者
猴君
阅读量:0

在Linux中,可以使用信号量或互斥锁来实现队列的并发控制。下面是一个简单的示例代码,展示如何使用互斥锁来控制一个队列的并发访问:

#include <stdio.h> #include <pthread.h>  #define MAX_QUEUE_SIZE 10  typedef struct {     int queue[MAX_QUEUE_SIZE];     int front, rear;     pthread_mutex_t lock; } Queue;  void initQueue(Queue *q) {     q->front = q->rear = 0;     pthread_mutex_init(&q->lock, NULL); }  void enqueue(Queue *q, int data) {     pthread_mutex_lock(&q->lock);      if ((q->rear + 1) % MAX_QUEUE_SIZE == q->front) {         printf("Queue is full\n");     } else {         q->queue[q->rear] = data;         q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;     }      pthread_mutex_unlock(&q->lock); }  int dequeue(Queue *q) {     int data;      pthread_mutex_lock(&q->lock);      if (q->front == q->rear) {         printf("Queue is empty\n");         data = -1;     } else {         data = q->queue[q->front];         q->front = (q->front + 1) % MAX_QUEUE_SIZE;     }      pthread_mutex_unlock(&q->lock);      return data; }  int main() {     Queue q;     initQueue(&q);      pthread_t producer, consumer;      pthread_create(&producer, NULL, (void *(*)(void *))enqueue, &q);     pthread_create(&consumer, NULL, (void *(*)(void *))dequeue, &q);      pthread_join(producer, NULL);     pthread_join(consumer, NULL);      return 0; } 

在上面的示例中,一个队列的结构体包含一个整型数组、队列的头尾指针以及一个互斥锁。在enqueue和dequeue函数中,通过加锁和解锁互斥锁来确保队列的并发安全。在main函数中,创建了生产者和消费者线程来向队列中添加元素和移除元素。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!