在Linux C编程中,并发队列是一种用于多线程环境下数据交换的数据结构,它允许多个线程安全地插入和移除元素。并发队列通常使用锁或者其他同步机制来保证线程安全。
基础概念:
优势:
类型:
应用场景:
遇到的问题及解决方法:
示例代码(基于锁的并发队列):
#include <pthread.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Queue {
Node *head;
Node *tail;
pthread_mutex_t lock;
} Queue;
void init_queue(Queue *q) {
q->head = q->tail = NULL;
pthread_mutex_init(&q->lock, NULL);
}
void enqueue(Queue *q, int value) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = value;
new_node->next = NULL;
pthread_mutex_lock(&q->lock);
if (q->tail) {
q->tail->next = new_node;
q->tail = new_node;
} else {
q->head = q->tail = new_node;
}
pthread_mutex_unlock(&q->lock);
}
int dequeue(Queue *q, int *value) {
pthread_mutex_lock(&q->lock);
if (!q->head) {
pthread_mutex_unlock(&q->lock);
return -1; // 队列为空
}
Node *temp = q->head;
*value = temp->data;
q->head = q->head->next;
if (!q->head) {
q->tail = NULL;
}
pthread_mutex_unlock(&q->lock);
free(temp);
return 0;
}
void destroy_queue(Queue *q) {
int value;
while (dequeue(q, &value) == 0);
pthread_mutex_destroy(&q->lock);
}
在这个示例中,我们定义了一个简单的并发队列,使用互斥锁来保证线程安全。enqueue
函数用于向队列中添加元素,dequeue
函数用于从队列中移除元素。当队列为空时,dequeue
函数会返回-1。
领取专属 10元无门槛券
手把手带您无忧上云