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

溫馨提示×

如何使用pthread_t實現線程間通信

小樊
83
2024-09-05 15:28:25
欄目: 編程語言

在C語言中,pthread_t 是一個用于表示線程的數據類型

  1. 首先,包含所需的頭文件:
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
  1. 定義一個全局變量作為共享數據。這里我們使用一個簡單的整數變量作為示例:
int shared_data = 0;
  1. 創建一個互斥鎖(mutex)以確保線程安全地訪問共享數據:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
  1. 定義兩個線程函數,分別用于生產者和消費者。在這些函數中,我們將使用互斥鎖來確保對共享數據的訪問是同步的:
void *producer(void *arg) {
    int i;
    for (i = 0; i < 10; i++) {
        pthread_mutex_lock(&lock);
        shared_data++;
        printf("Producer: %d\n", shared_data);
        pthread_mutex_unlock(&lock);
        sleep(1);
    }
    return NULL;
}

void *consumer(void *arg) {
    int i;
    for (i = 0; i < 10; i++) {
        pthread_mutex_lock(&lock);
        printf("Consumer: %d\n", shared_data);
        shared_data--;
        pthread_mutex_unlock(&lock);
        sleep(1);
    }
    return NULL;
}
  1. 在主函數中創建兩個線程,一個用于生產者,另一個用于消費者:
int main() {
    pthread_t producer_thread, consumer_thread;

    // 創建生產者線程
    if (pthread_create(&producer_thread, NULL, producer, NULL) != 0) {
        perror("Failed to create producer thread");
        exit(1);
    }

    // 創建消費者線程
    if (pthread_create(&consumer_thread, NULL, consumer, NULL) != 0) {
        perror("Failed to create consumer thread");
        exit(1);
    }

    // 等待線程完成
    pthread_join(producer_thread, NULL);
    pthread_join(consumer_thread, NULL);

    // 銷毀互斥鎖
    pthread_mutex_destroy(&lock);

    return 0;
}

這個示例展示了如何使用 pthread_t 和互斥鎖實現線程間通信。生產者線程和消費者線程都可以訪問共享數據 shared_data,但是通過使用互斥鎖,我們確保了在任何時候只有一個線程可以訪問該數據。

0
大城县| 安达市| 阿坝县| 平远县| 五常市| 定兴县| 成都市| 武陟县| 林周县| 绍兴县| 元谋县| 岢岚县| 乐业县| 炉霍县| 达孜县| 惠水县| 青河县| 安康市| 塔城市| 元阳县| 乐平市| 龙泉市| 车致| 玉树县| 岑巩县| 图木舒克市| 申扎县| 宁远县| 吉安市| 库车县| 贺州市| 且末县| 铜山县| 台湾省| 南昌县| 阿拉尔市| 金华市| 蒲城县| 慈溪市| 会同县| 加查县|