- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
操作系统课程设计
一.实验目标
完成N个生产者和M个消费者线程之间的并发控制,N、M不低于30,数
据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。
其中生产者线程1、3、5、7、9生产的产品供所有奇数编号的消费者线程消费,
只有所有奇数编号的消费者线程都消费后,该产品才能从缓冲区中撤销。
其中生产者线程2、4、6、8、10生产的产品所有偶数编号的消费者线程都可消
费,任一偶数编号消费者线程消费该消息后,该产品都可从缓冲区中撤销。
其中11-20号生产者线程生产的产品仅供对应编号的消费者线程消费。
其他编号生产者线程生产的产品可由任意的消费者线程消费。
每个生产线程生产30个消息后结束运行。如果一个消费者线程没有对应的生产
者线程在运行后,也结束运行。所有生产者都停止生产后,如果消费者线程已经
1
没有可供消费的产品,则也退出运行。
二.实验原理
2.1原理
生产者与消费者线程采用posix互斥锁机制进行互斥进入各自的代码段,只
有采用互斥锁临界区代码段才可以不被打扰的执行;同步机制采用的是posix条
件变量pthread_cond_wait和pthraed_cond_signal进行同步的。
线程间的通信采用的是共享内存机制。(注:所有的共享内存块是在进程里
建立的,线程只需链接上各自的共享内存块即可,每一块共享内存的大小是100).
在这里共享内存设置成一个100的数组。
具体实施:(1)为1.3.5.7.9建立一个共享内存1号,1.3.5.7.9生产者线程生
产的产品都放入这块共享内存缓冲区,所有奇数的消费者线程要消费的话,只需
在消费者线程中链接上这块共享内存,就可以直接消费1.3.5.7.9生产者线程生产
的产品。
(2)为2.4.6.8.10建立一块共享内存2号。2.4.6.8.10生产的产品都放入2号共
享内存缓冲区,所有的偶数的消费者线程只要链接上2号缓冲区,就可以消费
2.4.6.8.10生产的产品。当偶数消费者线程消费产品后,产品即可从缓冲区撤销,
方法是在消费线程里将消费的产品在共享内存数组里置0。
(3)为11--20的每一对生产者消费者线程建立一块共享内存,编号11--20.
11--20号的消费者线程能链接各自的共享内存缓冲区或奇数或偶数共享内存缓
冲区,即11--20号的生产者生产的产品只能被对应的消费者消费而11-20的奇数
消费者可以消费缓冲区1的产品,偶数消费者可消费缓冲区2的产品。
(4)为21--30号的生产者消费者线程只建立一块共享内存21号,21--30号生产
者生产的产品都放入21号缓冲区,所有的消费者线程只要链接上21号共享内存,
就可以消费21--30号生产者生产的产品。
用于控制线程是否结束的方法是:设置一个全局变量t,在生产者线程里进
行t++,在生产者线程里当t达到10时(注:为了很好的测试程序,本应该在生
产者生产30个产品时菜结束线程,这里设置成了10),就break跳出while()
循环,这样线程自然就终止。同样在消费者线程里,当t达到10时,这里不用
t++,就跳出while()循环,消费者线程自然就终止。这样设计满足了,当生产
者生产30个产品时就终止生产者线程,生产者线程终止消费者线程也得终止的
要求。
生产者从文件so.txt读取数据进行生产,这个文件里的数据是一连串的字符
从a--z的组合,没有空格或其他字符。文件内容的格式没有特殊要求。
2
2.2函数说明
创建线程函数:参数tida30是
线程号,produce30是线程30生产者函数。
消费者线程
其他线程与以上的两个线程函数功能一样,只是
文档评论(0)