栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

互斥锁,信号量实现生产者消费者模型

互斥锁,信号量实现生产者消费者模型

1.线程与进程的区别:线程是进程内部的一条执行路径(调度/执行的进本单位)
进程是一个正在运行的程序 分配资源的基本单位
2.线程的实现:用户 内核 组合
3.多线程代码(信号量,互斥锁)实现生产者,消费者模型

达到目的:生产者向内存中写入内容,消费者读取,且生产者写入内容的时候消费者不能读取。内容为满时生产者不能写入数据,为空时消费者不能读取数据。
思路:

代码详解
1.
(1)定义满的信号量和空的信号量,以控制消费者和生产者是否能往其中写入和读取资源,当sem_empty=0时生产者(2个)可以向其中写入数据,当sem_full!=0时,消费者(3个)能读取数据。
(2)定义锁变量,以实现生产者写入数据的时候,消费者不能读取数据。
2.

第一步:首先先初始化满和空的信号量,初始化互斥锁;为生产者和消费者设置线程id

第二步:给每个生产者变量和消费者变量都创建一个线程,并且调用生产者和消费者线程函数。
等待消费者和生产者线程的结束。

第三步:主函数的最后一步:等到线程结束后销毁信号量和互斥锁。
3.编写消费者和生产者线程函数

当生产者需要写入数据时,首先要获取资源,进行p操作,上锁,以防止消费者不能使用,打印出第几个线程在哪个位置输出了什么,最后结束后,解锁并且释放信号量。

消费者前面和生产者同样的原理,它打印出来的是第几个用户在什么位置打印出来了什么数据,之后解锁,并且释放资源和信号量。
ps:

运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/699773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号