legongju.com
我们一直在努力
2025-01-10 23:19 | 星期五

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

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

  1. 首先,包含所需的头文件:
#include
#include 
#include 
#include 
  1. 定义一个全局变量作为共享数据。这里我们使用一个简单的整数变量作为示例:
int shared_data = https://www.yisu.com/ask/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,但是通过使用互斥锁,我们确保了在任何时候只有一个线程可以访问该数据。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/100245.html

相关推荐

  • linux用gcc编译完怎么运行

    linux用gcc编译完怎么运行

    在Linux系统中,使用GCC编译器编译C或C++代码后,你可以按照以下步骤运行生成的可执行文件: 打开终端(Terminal)。 使用cd命令导航到包含可执行文件的目录。例...

  • linux怎么连接redis集群

    linux怎么连接redis集群

    在Linux上连接Redis集群,你需要遵循以下步骤: 安装Redis客户端库:首先,你需要为你的编程语言安装一个Redis客户端库。这里以Python为例,你需要安装redis-py-...

  • 如何优化Linux中Logstash的性能

    如何优化Linux中Logstash的性能

    为了优化Linux中Logstash的性能,可以从多个方面进行调整。以下是一些关键步骤和配置建议:
    优化Logstash性能的方法 调整工作线程数和批量处理大小:根据服...

  • Linux下Logstash日志处理技巧

    Linux下Logstash日志处理技巧

    Logstash 是一个开源的日志管理工具,它可以帮助你收集、分析和存储来自各种来源的日志数据 使用 Grok 过滤器解析日志:Grok 是 Logstash 中的一个过滤器,可以帮...

  • cors java跨域请求的性能优化

    cors java跨域请求的性能优化

    CORS(跨域资源共享)是一种安全机制,允许来自不同域名的Web应用程序进行交互。在Java中,我们可以使用过滤器(Filter)或拦截器(Interceptor)来实现CORS支持...

  • cors在微服务架构中的应用场景

    cors在微服务架构中的应用场景

    CORS(跨域资源共享)在微服务架构中的应用场景主要体现在允许来自不同源的Web应用安全地访问服务器资源。在微服务架构中,由于服务的分布式特性,前后端分离成为...

  • java应用中cors的版本兼容性问题

    java应用中cors的版本兼容性问题

    CORS(跨源资源共享)是一种安全机制,它允许Web应用从不同的源(域名、协议或端口)访问资源。在Java应用中,CORS的版本兼容性问题可能会导致跨域请求被阻止,从...

  • cors java跨域请求的头部信息设置

    cors java跨域请求的头部信息设置

    在Java中,处理CORS(跨域资源共享)跨域请求的头部信息设置通常是通过设置HTTP响应头实现的。以下是一个简单的示例,展示了如何在Java Servlet中设置CORS相关的...