zoukankan      html  css  js  c++  java
  • Linux多线程编程

    用消费者生产者模型说明Linux多线程编程

    //作用:阻塞并等待某处用函数pthread_cond_signal()发送信号
    pthread_cond_wait(&cond, &lock);
    //1.进入函数(这时的互斥量已经被锁住)
    //2.等待条件
    //3.解锁互斥量
    //4.等待条件
    //5.锁住互斥量
    //6.函数返回(这时的互斥量还是被锁住)
    //
    //说明:
    //1.在第2步就开始等待,是为了防止条件改变发生在第3步和第4步之间,防止遗漏任何的条件改变
    //2.在进入函数时就锁住互斥量,保护了条件变量,防止条件变量在调用函数pthread_cond_wait()之前就改变
    //3.函数pthread_cond_wait()放在while()循环中,可防止当该函数返回时,被互斥量保护的普通变量goods仍不满足条件
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
    
    #define MAX 20
    
    pthread_mutex_t lock;
    pthread_cond_t cond;
    int goods = 0;
    void *ThrPro(void *ptr)
    {
        sleep(5);//休眠5s
        int i;
        for(i = 0; i < MAX; i++) {
            pthread_mutex_lock(&lock);
            while(goods != 0)
                pthread_cond_wait(&cond, &lock);
            printf("pro add, i:%d, goods:%d
    ", i, goods);
            goods++;
            pthread_cond_signal(&cond);
            pthread_mutex_unlock(&lock);
        }
        pthread_exit(0);
    }
    
    void *ThrCon(void *ptr)
    {
        int i;
        for(i = 0; i < MAX; i++) {
            pthread_mutex_lock(&lock);
            while(goods == 0)
                pthread_cond_wait(&cond, &lock);
            printf("con min, i:%d, goods:%d
    ", i, goods);
            goods--;
            pthread_cond_signal(&cond);
            pthread_mutex_unlock(&lock);
        }
        pthread_exit(0);
    }
    
    int main()
    {
        pthread_t pro, con;
    
        pthread_mutex_init(&lock, 0);//初始化互斥量lock
        pthread_cond_init(&cond, 0);//初始化条件变量
        pthread_create(&pro, 0, ThrPro, 0);//创建线程pro,从函数ThrPro处运行
        pthread_create(&con, 0, ThrCon, 0);//创建线程con,从函数ThrCon处运行
        pthread_join(pro, 0);//阻塞,以等待线程pro结束
        pthread_join(con, 0);//阻塞,以等待线程con结束
        pthread_mutex_destroy(&lock);//释放互斥量lock
        pthread_cond_destroy(&cond);//释放条件变量cond
        return 0;
    }
  • 相关阅读:
    设计并实现一个漂亮的结婚小站
    Android新特性--ConstraintLayout完全解析
    Android之MainActivity类
    Android app启动activity并调用onCreate()方法时都默默地干了什么?
    Android Studio开发-高效插件强烈推荐
    Android SDK Manager详解
    Android Studio中如何设置颜色拾色器工具
    独立的android开发者开发app如何盈利?
    Android Studio开发常用快捷键
    最强 Android Studio 使用小技巧和快捷键总结
  • 原文地址:https://www.cnblogs.com/season-peng/p/6759523.html
Copyright © 2011-2022 走看看