- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
山大操作系统课程的设计的报告
计算机科学与技术学院实验报告:3
?
实验题目:信号量同步问题 日期:2010-11-10 姓名: 实验目的:
在本次实验中,通过使用信号量,在原有的程序框架的基础上添加关键代码实现生产者/消费者同步问题。从而深入理解Nachos的信号量的使用以及实现,生产者/消费者问题是如何用信号量实现的以及
在Nachos中是如何创建线程,实现多线程。
硬件环境:?
软件环境:
Linux
实验步骤:
1.首先初始化三个信号量,代码如下:
mutex = new Semaphore(mutux,1);信号量初始化为1,才能起到加锁功能
nfull = new Semaphore(full,0);nfull的大小在生产者没生产前为0
nempty = new Semaphore(empty,BUFF_SIZE);nempty的大小应该为buffer的大小
2.首先考虑生产者进程,首先要查看buffer是否有空, nempty-P();if nempty0,nempty=nempty -1,当对缓冲区操作时必须要加锁:mutex-P();加锁.
然后向ring中放入message信息,其次还要解锁mutex-V();解锁.最后通知消费者buffer有新信息, nfull-V();nfull=nfull+1;具体实现代码如下:
3. 考虑消费者进程,像生产者进程一样,查看buffer中是否有信息
nfull-P();if nfull0,nfull-1;取消息时也要上锁,即:mutex-P();加锁.
然后从ring buffer中取出信息;其次mutex-V();解锁;最后通知生产者bufferr有空nempty-V();nempty=nempty+1,具体代码如下:
4. 创建线程生成一个生产者的代码:
producers[i] = new Thread(prod_names[i]);
producers[i] - Fork(Producer,i);
4. 创建线程生成一个消费者的代码:
producers[i] = new Thread(prod_names[i]);
producers[i] - Fork(Producer,i);
关键代码:
void
Producer(_int which)
{
int num;
slot *message = new slot(0,0);
for (num = 0; num N_MESSG ; num++) {
//这是消息创建的代码
message-thread_id=which;
message-value=num;
//p,v 操作
nempty-P();
mutex-P();
ring-Put(message);
//p,v 操作
mutex-V();
nfull-V();
}
}
void
Consumer(_int which)
{
char str[MAXLEN];
char fname[LINELEN];
int fd;
slot *message = new slot(0,0);
sprintf(fname, tmp_%d, which);
// create a file. Note that this is a UNIX system call.
if ( (fd = creat(fname, 0600) ) == -1)
{
perror(creat: file create failed);
Exit(1);
}
for (; ; ) {
// p,v,操作
nfull-P();
mutex-P();
ring-Get(message);
// p,v,操作
mutex-V();
nempty-V();
// form a string to record the message
sprintf(str,producer id -- %d; Message number -- %d;\n,
message-thread_id,
message-value);
//把信息写入文件
if ( write(fd, str, strlen(str)) == -1 ) {
perror(write: write failed);
Exit(1);
}
}
}
//
//
您可能关注的文档
- 山东省烟台市2014届高三3月模拟 理综 含的答案.doc
- 山东省烟台市2010年中考物理试题及的答案.doc
- 山东省烟台市2014届高三3月模拟 理综化学 含的答案.doc
- 山东省烟台市2014届高三3月模拟 理综物理 含的答案.doc
- 山东省烟台市2014届高三3月模拟 英语 含的答案.doc
- 山东省畜牧业统计监测工作实施的方案.doc
- 山东省的劳动合同范本 共.doc
- 山东省苍山第一中学高一英语期末试卷.doc
- 山东省烟台市2014届高三3月模拟考试 文科数学 含的答案.doc
- 山东省胶州一中2015届高三上学期10月第一次质量检测数学理试题 含的答案.doc
- 变压器行业深度驱动因素出海机遇产业链及相关企业深度梳理-24082327页.pdf
- 稳健医疗-公司深度报告医疗消费双轮驱动步入新元年长期主义未来可期-240823.pdf
- 中矿资源-公司深度报告地勘赋能多金属矿业新星展宏图-24082329页.pdf
- 固废行业巡礼一特许经营权到期国补退坡问题解答-24082325页.pdf
- 电力行业策略坚定变革价值凸显回归公用穿越周期-24082541页.pdf
- 中汽股份-公司研究报告-汽车试验场领军者智能网联二期投产向上-24082321页.pdf
- 光伏行业国内需求筑底向上出海中东瞄准高溢价市场-24082316页.pdf
- 汽车行业中资出海专题系列研究整车全球变革风起时自主品牌正扬帆-24081934页.pdf
- 福能股份-公司深度报告火电乘风多能共进-24082117页.pdf
- 瑞幸咖啡企业调查.pptx
最近下载
- 2024年昆明滇池国家旅游度假区国有资产投资经营管理(集团)有限责任公司人员招聘笔试备考题库及答案解析.docx
- 【教案】胚胎工程的理论基础教学设计高二下学期生物人教版(2019)选择性必修3.docx VIP
- 2024年新教材七年级上册道德与法治1.2《规划初中生活》教案.docx
- 小学五年级体育《蹲踞式跳远:助跑与起跳》教学设计.doc
- 残疾儿童送教上门一生一案资料.doc
- 铅火法冶炼工(稿).doc
- 与时代同行--中国电视文艺晚会的发展趋势初探.pdf
- 中国-象棋基础知识(适合儿童教学用)课件108页.ppt
- 安川伺服驱动器使用说明书..docx
- 第九章 马利冷却塔NC8400用户手册.pdf
文档评论(0)