赵颢凯 柴玉梅







摘要:在计算机操作系统的学习过程中,生产者—消费者问题向来是難点。结合Linux系统提供的互斥锁机制,编写C语言程序实现生产者—消费者问题,并对运行结果进行了详细分析,旨在帮助学习者更好地理解该问题,为掌握其他进程同步与互斥问题奠定基础。
关键词:生产者—消费者问题;进程同步;Linux;互斥锁
中图分类号:TP316 文献标识码:A
文章编号:1009-3044(2021)36-0132-03
开放科学(资源服务)标识码(OSID):
Using Linux Mutex Mechanism to Solve Producer-consumer Problem
ZHANG Hao-kai, CHAI Yu-mei
(School of Computer and Software Engineering,University of Science and Technology Liaoning, Anshan 114051, China)
Abstract: In the process of learning computer operating system, the producer-consumer problem has always been difficult . Based on the mutex mechanism provided by Linux, a C program is written to solve the problem.And the results are analyzed in detail to help learners better understand the problem and lay foundation for mastering other process synchronization and mutex problems.
Key words:producer-consumer problem; process synchronization; Linux; mutex
1 引言
生产者—消费者问题是操作系统中一个经典的进程同步问题。该问题是指有若干个生产者和消费者线程,连接在可数个单位缓冲区的有界环状缓冲上,故又称有界缓冲问题。在缓冲区内生产者线程所产生的产品不断地被投入,只要缓冲区未空,消费者线程就会不断地从缓冲区中取走或消费产品[1]。
在学习的过程中,笔者发现自己及周围的很多同学对此都不甚理解。因此想借助Linux系统提供的互斥锁机制,设计一个C语言的程序来更好地理解该问题。
2 生产者—消费者问题描述
2.1 二者的关系图
生产者线程与消费者线程关系如图1所示。
2.2 问题分析
生产者线程和消费者线程对缓冲区进行操作时,如果未加以限制,就会造成缓冲区结果不唯一。并且两者的交替的执行会导致线程之间永远的等待,造成系统出现死锁的状态。原因是两者之间访问缓冲区的速度不匹配,需要调整并发的线程的执行速度,这种关系也被叫作线程同步。
3 Linux互斥锁解决生产者—消费者问题……p>