- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系统程序设计》
实验报告
2014年 1月 2日
操作系统报告
设计目标
(1)掌握并能够灵活使用线程机制
(2)掌握并能够灵活使用同步互斥机制
(3)了解并能够较灵活地使用IO技术
问题描述:
1)完成N个生产者和M个消费者线程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。
2)生产者线程1、3、5、7、9生产的产品供所有奇数编号的消费者线程消费,只有所有奇数编号的消费者线程都消费后,该产品才能从缓冲区中撤销。
3)其中生产者线程2、4、6、8、10生产的产品所有偶数编号的消费者线程都可消费,任一偶数编号消费者线程消费该消息后,该产品都可从缓冲区中撤销。
4)11-20号生产者线程生产的产品仅供对应编号的消费者线程消费。
5)编号生产者线程生产的产品可由任意的消费者线程消费。
6)每个生产线程生产30个消息后结束运行。如果一个消费者线程没有对应的生产者线程在运行后,也结束运行。所有生产者都停止生产后,如果消费者线程已经没有可供消费的产品,则也退出运行。
二、背景知识
原理
我们是利用多线程的并发执行,为了防止各个线程对于临界资源的抢占造成数据的修改照成数据的不一致,所以采取了互斥锁和信号量方面的操作,保证在临界资源的利用上,在一个同一个时间点只有一个线程对其进行修改,从而保证了数据的一致性和预防死锁的发生。
相关函数说明
在linux下,各个关于线程操作的系统调用函数一般位于# include pthread.h头文件下面。因此我们在这个程序中因此引入了#includepthread.h头文件。关于线程的操作,能用到的函数有:
1)pthread_create(pthread_t *thread,constpthread_attr_t *attr, void*(*start_routine) (void*),void*arg);
参数
第一个参数为指向线程HYPERLINK /view/390932.htm标识符的HYPERLINK /view/159417.htm指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
若线程创建成功,则返回0。若线程创建失败,则返回出错编号,并且*thread中的内容是未定义的。
int HYPERLINK /view/2925158.htmpthread_join(pthread_t thread, void **retval);
参数 :
thread: 线程HYPERLINK /view/390932.htm标识符,即线程ID,标识唯一线程。
retval: 用户定义的指针,用来存储被等待线程的返回值。
描述 :
pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果进程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。
返回值 : 0代表成功。 失败,返回的则是错误号。
int pthread_mutex_lock(pthread_mutex_t *mutex);
参数:
mutex:互斥锁变量,由pthread_mutex_t创建。
描述:
当pthread_mutex_lock()返回时,该HYPERLINK /view/1461738.htm互斥锁已被锁定。HYPERLINK /view/1053.htm线程调用该函数让HYPERLINK /view/1461738.htm互斥锁上锁,如果该HYPERLINK /view/1461738.htm互斥锁已被另一个HYPERLINK /view/1053.htm线程锁定和拥有,则调用该线程将阻塞,直到该互斥锁变为可用为止。
返回值:
在成功完成之后会返回零。其他任何返回值都表示出现了错误。
int pthread_mutex_unlock(pthread_mutex_t *mptr);
参数:
mptr:互斥锁变量,由pthread_mutex_t创建。
描述:
作用和pthread_mutex_lock相反,是为了解锁一个锁的变量。
5)int pthread_mutex_trylock( pthread_mutex_t *mutex );
参数:
mutex:是一个锁的对象变量名。
描述:
函数是pthread_mutex_lock函数的非阻塞版本。如果mutex参数所指定的互斥锁已经被锁定的话,调用pthread_mutex_trylock函数不会阻塞当前线程,而是立即返回一个值来描述互斥锁的状况。
返回值:
HYPERLINK /view/15061.htm函数成功返回0。任何其他返回值都表示错误。
三、设计
设计
您可能关注的文档
最近下载
- 公路桥涵施工技术规范(JTJ041-2000).doc VIP
- 西威变频器快速调试手册(电梯维修资料).pdf VIP
- 《国际汉语教师证书》考试汉办真题20170423 .pdf VIP
- 2025年高考语文课内文言文知识梳理(统编版)专题10《谏逐客书》(原卷版).docx VIP
- 07J905-1 防火建筑构造(一).pdf
- 2025年衢州常山县统计局公开招聘编外统计员13人笔试备考试题含答案详解(能力提升).docx
- 2025年贵州省中考数学真题试卷及答案.docx VIP
- 中国红磷阻燃剂项目商业计划书.docx
- gc65-全球小四频封装gsm gprs模块尺寸仅为opencpu规格说明书.pdf VIP
- 2025年中国车辆照明及电气信号设备制造项目投资计划书.docx
文档评论(0)