消费者与生产者的线程之间同步操作
来源:互联网 发布:.php结尾的网页 收录 编辑:程序博客网 时间:2024/05/11 19:07
实验目的
通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。
实验内容
“生产者–消费者”问题描述如下:
有一个有限缓冲区(这里用有名管道实现FIFO式缓冲区)和两个线程:生产者和消费者,它们不停地把产品放入缓冲区和从缓冲区拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。它们之间的关系如下图1所示:
实验步骤
(1) 信号量的考虑。这里使用3个信号量,其中两个信号量avail和full分别用于解决生产者和消费者之间的同步问题,mutex用于解决这两个线程之间的互斥问题。其中,avail表示有界缓冲区中的空单元数,初始值为N;full表示有界缓冲区中的非空单元数,初始值为0;mutex是互斥信号量,初始值为1。
(2) 流程图如下:
(3) 编写代码。本实验的代码中采用的有界缓冲区拥有3个单元,每个单元为5字节。为了尽量体现每个信号量的意义,在程序中生产过程和消费过程是随机(采取0~5s的随机时间间隔)进行的,而且生产者的速度比比消费者的速度平均快两倍左右(这种关系可以相反)。生产者一次生产一个单元的产品(放入“hello”字符串),消费者一次消费一个单元的产品。
实验代码如下:producer-customer.c文件
实验结果
编译:gcc producer-customer.c -o producer-customer -lpthread
执行: sudo ./producer-customer,注意这里要以root权限执行
结果:
0 0
- 消费者与生产者的线程之间同步操作
- 消费者与生产者的线程之间同步操作
- 两个线程之间的同步(生产者与消费者问题)性能优化
- 线程的同步与互斥---生产者消费者模型
- 多线程 消费者与生产者 的问题 (线程同步)
- 同步线程--生产者与消费者模式
- 消费者与生产者线程同步程序
- 线程同步(消费者与生产者)
- C#生产者与消费者问题 线程同步
- 线程同步-生产者与消费者问题
- 线程同步:生产者与消费者模型
- 线程同步–生产者与消费者模式
- 生产者、消费者 线程同步
- 线程同步--生产者消费者
- 生产者消费者模式的线程同步问题
- 线程同步:生产者和消费者的问题
- 3.4生产者/消费者的线程同步模型
- synchronized2:生产者与消费者的同步
- android中衡量一个APK性能的方法(fps、cpu、内存、gpu、io参数)
- window dos基本操作命令介绍
- Codeforces722 C Destroying Array
- 文章标题 POJ 2965 : The Pilots Brothers' refrigerator(枚举+dfs)
- 一曲萧何送一生
- 消费者与生产者的线程之间同步操作
- 【ssm架构】系统架构-SSM与三层架构的关系
- 安卓检测网络连接状态的工具类
- java 注解的几大作用及使用方法详解
- 【树规】 JZOJ4814
- JDK并发包-(下).md
- HDU 1865 1sting 斐波那契数列 + 大数加法
- codevs1036 商务旅行
- Debian下编写shell文件