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

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

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

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

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

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

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

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

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

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

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

运行结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存