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

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

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

#include <stdio.h>#include <pthread.h>#define MAX_QUEUE_SIZE 10typedef 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函数中,创建了生产者和消费者线程来向队列中添加元素和移除元素。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号