91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言列隊如何處理多線程

小樊
83
2024-10-16 22:46:33
欄目: 編程語言

在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

這將輸出生產者和消費者線程交替執行的隊列操作。

0
大洼县| 永年县| 宁海县| 巴中市| 天柱县| 保靖县| 顺昌县| 阜康市| 双流县| 富锦市| 汾阳市| 镇原县| 监利县| 武邑县| 南澳县| 文山县| 丹阳市| 大渡口区| 扬州市| 会泽县| 都安| 西贡区| 土默特右旗| 黄冈市| 黔西县| 唐山市| 深泽县| 鸡东县| 侯马市| 陇西县| 安阳县| 百色市| 日照市| 杭锦后旗| 贺州市| 大安市| 长岭县| 积石山| 合水县| 玉林市| 佛坪县|