操作系统课程设计
实验报告
姓名:张继来
学号:
学院:计算机科学与技术学院
专业:电子商务专业 级
实验题目:信号量同步问题 姓名:张继来
日期: 班级:电子商务 级 学号:
实验目的:
在本次实验中,通过使用信号量,在原有的程序框架的基础上添加关键代码实现生产者消
费者同步问题。从而深入理解 的信号量的使用以及实现,生产者消费者问题是如
何用信号量实现的以及
在 中是如何创建线程,实现多线程。
硬件环境:_
软件环境:
实验步骤:
首先初始化三个信号量,代码如下:
信号量初始化为 ,才能起到加锁功能
!""!"" !"" 的大小在生产者没生产前为
##$%&&'()* # 的大小应该为 +, 的
大小
首 先 考 虑 生 产 者 进 程 , 首 先 要 查 看 +, 是 否 有 空 #-. !
#-##,当对缓冲区操作时必须要加锁:-. 加锁
然后向 / 中放入 / 信息,其次还要解锁 -0 解锁最后通知消费者
+, 有新信息!""-0 !""!""1;具体实现代码如下:
考虑消费者进程,像生产者进程一样,查看 +, 中是否有信息
!""-. !!""-!"";取消息时也要上锁,即:-. 加锁
然后从 /+, 中取出信息;其次 -0 解锁;最后通知生产者 +, 有空
#-0 ##1,具体代码如下:
2创建线程生成一个生产者的代码:
345633'45
345-&7.3
2创建线程生成一个消费者的代码:
345633'45
345-&7.3
关键代码:
83
.3'
9
":/"
! ;'<*= 119
这是消息创建的代码
/-3'3
/-8"
8操作
#-.
-.
/-./
8操作
-0
!""-0
>
>
83
?'
9
4<@A*5
!4(**5
!3
":/"
!!'B3
C"%(A#""
!!3!D
9
EC"!"3
*
>
! 9
8操作
!""-.
-.
/-=/
8操作
-0
#-0
!/3/
!33-B3 </+-B3 F
/-3'3
/-8"
把信息写入文件
!!3"9
E!"3
*
>
>
>
.3?
初始化信号量以及需要的生产者消费者线程
83
.3?
9
G*$%=HH*/.3?
//_初始化信号量,包括一个访问互斥信号量,初值为1;
//一个nempty信号量,初值为缓冲区的大小
//一个nfull的信号量,初值为0
____
##$%&&'()*
!""!""
新建一个缓冲区
/I/$%&&'()*1
3!7'.IJG!33
! ;'.IJG 11
9
!/+3!
33
!3'453'B3
创建生产者线程
345633'45
345-&7.3
>
3!7'?J!3
! ;'?J 11
9
!/+3!
!'45'B3
创建消费者线程
4563'45
45-&7?
>
>
调试记录:
在源代码中 没有大写,调试过程发现了这个问题改正,
在使用 系统调用写入文件时,有一个头文件没有引入,因而需要修改
K"3;3-
K"3#/
K"3#
K"3;3-
K"3;!"-
而且对于新添加的头文件的方法其中源文件使用的一个方法是废弃的,所以改成相应的方
法 !3",
实验结果:
生成两个文件分别代表两个消费者取得的产品的记录。
文件 '
33- </+-
文件 '
33- </+-