《实验3produ-con》由会员分享,可在线阅读,更多相关《实验3produ-con(16页珍藏版)》请在金锄头文库上搜索。
1、1,实验内容,实验题目 采用多线程技术解决生产者/消费者问题 实验目的 掌握pthread线程编程基本技术 理解线程同步机制 掌握多线程同步控制编程技术,2,生产者/消费者问题问题描述,也称有界缓冲区问题 多个生产者线程向缓冲区中写数据 多个消费者线程从缓冲区中读取数据 生产者线程和消费者线程必须满足 生产者写入缓冲区的数目不能超过缓冲区容量 消费者读取的数目不能超过生产者写入的数目,3,生产者/消费者问题PV原语操作,4,生产者/消费者问题问题分析,缓冲区须被生产者/消费者进程互斥访问 生产者进程 多个并发写进程互斥改变写指针 写入条件:缓冲区非满 消费者进程 多个并发读进程互斥改变读指针
2、读取条件:缓冲区非空 读写指针设计 初始化时读指针和写指针为0 如果读指针等于写指针,则缓冲区为空 如果(写指针+ 1) % BUFFER_SIZE等于读指针,则缓冲区为满,生产者/消费者问题问题分析,缓冲区访问结构示意图关键问题 如何利用线程互斥变量机制定义缓冲区结构 如何利用线程同步通信机制协调生产者/消费者进程通信 解决途径 线程条件变量通信机制,5,6,生产者/消费者问题解题思路,缓冲区结构定义 一个mutex变量:pthread_mutex_t 两个条件变量(控制读写指针):pthread_cond_t,生产者/消费者问题解题思路,生产者/消费者进程的同步通信协调,7,9,生产者/消
3、费者问题解决方案,主程序启动生产者/消费者线程 生产者线程顺序地将0 到1000写入循环缓冲区 消费者线程不断地从共享的循环缓冲区读取数据,生产者/消费者问题关键函数,线程管理相关函数 int pthread_create( ); int pthread_join(); 线程互斥控制相关函数 int pthread_mutex_init(); int pthread_mutex_lock(); int pthread_mutex_unlock(); 线程条件变量控制相关函数 int pthread_cond_init(); int pthread_cond_wait(); int pthread_cond_signal();,10,11,生产者/消费者问题程序代码,12,生产者/消费者问题程序代码,13,生产者/消费者问题程序代码,14,生产者/消费者问题程序代码,15,生产者/消费者问题程序代码,生产者/消费者问题运行,编译、执行 gcc proncons.c o proncons lpthread ./proncons 运行结果,16,