Linux多线程编程

来源:互联网 发布:2017网络彩票代理加盟 编辑:程序博客网 时间:2024/04/29 04:24

用消费者生产者模型说明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 20pthread_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\n", 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\n", 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;}
0 0
原创粉丝点击