在Linux中,可以使用信号量或互斥锁来实现队列的并发控制。下面是一个简单的示例代码,展示如何使用互斥锁来控制一个队列的并发访问:
#include#include #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 = https://www.yisu.com/ask/-1;>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函数中,创建了生产者和消费者线程来向队列中添加元素和移除元素。