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
- Linux多线程编程
- Linux多线程编程
- pthread/Linux多线程编程
- Linux多线程编程
- Linux 多线程编程入门
- linux下多线程编程
- Linux 多线程编程
- UNIX/LINUX 多线程编程
- Linux 多线程编程笔记
- linux下多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程基础
- 嵌入式linux多线程编程
- Linux多线程编程
- Linux多线程编程
- 【PAT】A1056. Mice and Rice (25)
- Java的NIO之不同channel之间传输数据
- 汽车:圆梦不需5万元 大空间优质小型车推荐
- TinyXml API使用
- 动态添加table,并且对表格数据进行编辑
- Linux多线程编程
- java递归调用——判断根目录盘符下的相同后缀名文件的个数
- Java的NIO之FileChannel
- 几种常见的字符串匹配算法
- zabbix_get [12429]: Check access restrictions in Zabbix agent configuration
- OpenCV配置设置编译等问题汇总
- Codeforces Round #382 (Div. 2) A. Ostap and Grasshopper
- React + Typescript + Webpack 开发环境配置
- PL/SQL Developer如何连接64位的Oracle图解