如何使用pthread_t实现线程间通信

   2024-09-30 7460
核心提示:在C语言中,pthread_t 是一个用于表示线程的数据类型首先,包含所需的头文件:#includestdio.h#include stdlib.h#include pthrea

在C语言中,pthread_t 是一个用于表示线程的数据类型

首先,包含所需的头文件:
#include<stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>
定义一个全局变量作为共享数据。这里我们使用一个简单的整数变量作为示例:
int shared_data = 0;
创建一个互斥锁(mutex)以确保线程安全地访问共享数据:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
定义两个线程函数,分别用于生产者和消费者。在这些函数中,我们将使用互斥锁来确保对共享数据的访问是同步的:
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;}
在主函数中创建两个线程,一个用于生产者,另一个用于消费者:
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,但是通过使用互斥锁,我们确保了在任何时候只有一个线程可以访问该数据。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号