请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

[复制链接]
查看11 | 回复1 | 2007-10-8 22:50:32 | 显示全部楼层 |阅读模式
原理很简单,但是实现是非常复杂的。其中牵涉到大量的用于系统内核的C语言库函数,对于刚刚开始学习的学生来说,那实在是太困难了。我也学操作系统。P语言描述的也不错,就凑合着用吧。这里有完整源代码38K。你可以想象有多么夸张了。见我的参考资料。参考资料:http://www.hsip.cn/soft/3/2006/1D1513422145.html

已赞过已踩过<
回复

使用道具 举报

千问 | 2007-10-8 22:50:32 | 显示全部楼层
我这是C++的,在网上搜到的,借给你用用, 其实都一样 改个cout cin 就是C了 没问题的 这是我们操作系统实验#includewindows.h#includeiostream.h#includestdio.hHANDLE hMutex; HANDLE hFull, hEmpty; HANDLE p,c;DWORDWINAPI Producer(LPVOID);DWORDWINAPI Consumer(LPVOID);int a[100],i,j;void main(){
cout生产者消费者问题endl; a[100]=i=j=0; hMutex=CreateMutex(NULL,FALSE,NULL); hFull=CreateSemaphore(NULL,0,1,NULL);hEmpty=CreateSemaphore(NULL,1,1,NULL); p=CreateThread(NULL,0,Producer,NULL,0,NULL);c=CreateThread(NULL,0,Consumer,NULL,0,NULL); Sleep(150000); }void Produce(){ cout生产者生产产品...endl; cout生产成功endl;}DWORDWINAPI Producer(LPVOID lpPara){ while(TRUE){WaitForSingleObject(hEmpty,INFINITE); WaitForSingleObject(hMutex,INFINITE);Produce();
a=i;i=(i+1)%100;Sleep(5000);ReleaseMutex(hMutex);ReleaseSemaphore(hFull,1,NULL); } return 0;}void Consume(){ cout消费者消费产品 ... endl; cout消费成功endl; cout请等待...endl;}DWORD WINAPI Consumer(LPVOID lpPara){while(TRUE){WaitForSingleObject(hFull,INFINITE); WaitForSingleObject(hMutex,INFINITE);
cout缓冲区a[j]endl;a[j]=999;j=(j+1)%100;Consume();Sleep(5000);ReleaseMutex(hMutex);ReleaseSemaphore(hEmpty,1,NULL); } return 0;}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行