c语言列队如何处理多线程

avatar
作者
筋斗云
阅读量:0

在C语言中,处理多线程通常需要使用线程库,如POSIX线程(pthread)库。下面是一个简单的示例,展示了如何使用pthread库创建多个线程并执行队列操作。

首先,确保你的系统支持pthread库。然后,创建一个名为queue.h的头文件,用于定义队列结构和相关的函数原型:

#ifndef QUEUE_H #define QUEUE_H  typedef struct {     int *data;     int front;     int rear;     int size;     int capacity; } Queue;  Queue* createQueue(int capacity); void enqueue(Queue *queue, int item); int dequeue(Queue *queue); int isFull(Queue *queue); int isEmpty(Queue *queue);  #endif 

接下来,创建一个名为queue.c的文件,用于实现队列结构和相关的函数:

#include <stdio.h> #include <stdlib.h> #include "queue.h"  Queue* createQueue(int capacity) {     Queue *queue = (Queue *)malloc(sizeof(Queue));     queue->capacity = capacity;     queue->front = queue->size = 0;     queue->rear = capacity - 1;     queue->data = (int *)malloc(queue->capacity * sizeof(int));     return queue; }  void enqueue(Queue *queue, int item) {     if (isFull(queue)) {         printf("Queue is full\n");         return;     }     queue->rear = (queue->rear + 1) % queue->capacity;     queue->data[queue->rear] = item;     queue->size = queue->size + 1; }  int dequeue(Queue *queue) {     if (isEmpty(queue)) {         printf("Queue is empty\n");         return -1;     }     int item = queue->data[queue->front];     queue->front = (queue->front + 1) % queue->capacity;     queue->size = queue->size - 1;     return item; }  int isFull(Queue *queue) {     return (queue->size == queue->capacity); }  int isEmpty(Queue *queue) {     return (queue->size == 0); } 

然后,创建一个名为main.c的文件,用于创建多个线程并执行队列操作:

#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include "queue.h"  Queue *queue; pthread_mutex_t lock;  void *producer(void *arg) {     for (int i = 1; i <= 10; i++) {         pthread_mutex_lock(&lock);         enqueue(queue, i);         printf("Produced: %d\n", i);         pthread_mutex_unlock(&lock);     }     return NULL; }  void *consumer(void *arg) {     for (int i = 0; i < 10; i++) {         pthread_mutex_lock(&lock);         int item = dequeue(queue);         printf("Consumed: %d\n", item);         pthread_mutex_unlock(&lock);     }     return NULL; }  int main() {     queue = createQueue(5);     pthread_t producerThread, consumerThread;      pthread_mutex_init(&lock, NULL);      pthread_create(&producerThread, NULL, producer, NULL);     pthread_create(&consumerThread, NULL, consumer, NULL);      pthread_join(producerThread, NULL);     pthread_join(consumerThread, NULL);      pthread_mutex_destroy(&lock);      free(queue->data);     free(queue);      return 0; } 

在这个示例中,我们创建了一个具有5个元素的队列,并使用两个线程分别执行生产者(producer)和消费者(consumer)操作。我们使用互斥锁(pthread_mutex_t)来确保在多线程环境下对队列的安全访问。

要编译和运行此示例,请使用以下命令:

gcc -o main main.c queue.c -lpthread ./main 

这将输出生产者和消费者线程交替执行的队列操作。

广告一刻

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