Li
ux信号量机制实现读者写者问题r
设计目的:通过研究Li
ux的进程机制和信号量实现生产者消费者问题的并发控制.r
说明:有界缓冲区设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数.r
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者县城的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.r
提示:(1)有界缓冲区可用数组实现.r
r
生产者消费者问题在wi
dows2000下的实现r
r
r
一、问题描述r
r
生产者消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。r
r
r
r
二、实现代码r
r
i
cludewi
dowshr
i
cludeiostreamr
r
co
stu
sig
edshortSIZE_OF_BUFFER10缓冲区长度r
u
sig
edshortProductID0产品号r
u
sig
edshortCo
sumeID0将被消耗的产品号r
u
sig
edshorti
0产品进缓冲区时的缓冲区下标r
u
sig
edshortout0产品出缓冲区时的缓冲区下标r
r
i
tg_bufferSIZE_OF_BUFFER缓冲区是个循环队列r
boolg_co
ti
uetrue控制程序结束r
HANDLEg_hMutex用于线程间的互斥r
HANDLEg_hFullSemaphore当缓冲区满时迫使生产者等待r
HANDLEg_hEmptySemaphore当缓冲区空时迫使消费者等待r
r
DWORDWINAPIProducerLPVOID生产者线程r
DWORDWINAPICo
sumerLPVOID消费者线程r
r
i
tmai
r
r
创建各个互斥信号r
g_hMutexCreateMutexNULLFALSENULLr
g_hEmptySemaphoreCreateSemaphoreNULL0SIZE_OF_BUFFER1NULLr
r
调整下面的数值,可以发现,当生产者个数多于消费者个数时,r
生产速度快,生产者经常等待消费者;反之,消费者经常等待r
co
stu
sig
edshortPRODUCERS_COUNT3生产者的个数r
co
stu
sig
edshortCONSUMERS_COUNT1消费者的个数r
r
总的线程数r
co
stu
sig
edshortTHREADS_COUNTPRODUCERS_COUNTCONSUMERS_COUNTr
r
DWORDproducerIDCONSUMERS_COUNT生产者线程的标识符r
DWORDco
sumerIDTHREADS_COUNT消费者线程的标识符r
r
创建生产者线程r
for