版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?操作系统原理?上机作业报告作业:信号量机制作业编号8题目信号量机制作业【题目要求】通过多线程编程模拟进程的同步,互斥及信号量机制的 经典问题.1编程解决下列图前趋图问题,使得 5个线程按该图要求运行,要求其中P1P5代表5个代码块,每个代码块分别由1个线程运行模拟, 每个代码块执行时分别可以打印输出该代码块的名称(P1P5),每个代码块运行时需要睡眠(sleep() 一定时间.(2)利用多线程编程和信号量机制模拟生产者消费者问题(多生产者和多消费者).(3)利用多线程编程和信号量机制模拟哲学家就餐问题,至少实现1种不会出现死锁的方案.(4)利用多线程编程和信号量机制模拟读写者问题.【实验要求
2、】可选编程语言:C/C+/Java/C#/Python;一个小题实现在同一个程序文件中(C/C+);请适当注释;报 告正文(运行屏幕截图及源代码)截图.1.I号:便面战程'信号量1.CKU人代玛城开始送仃.代码块开始运行一.用3代码抚开帕运仃一.P5优吗块彳始运行.P4代码展讦蛤运行.ilocess exited after 0.4091 sec ends irith return value L 清报任意跳婚埃 2.DE aj-aj=- 才=rh!一 目匚自 TJ -3- 目 芦 首 E 营 呼 二【&二 L&1J &=_ rtnFJJU niw-l=tan
3、= LfrR- TfTl-IHI HdTlin -3- U3 ft_Q 3J33 Q- 33 Q Q- - Ta owirim41旨IBSmw 2且®mm号y 5机a d.¥7攵电:'a -攵勺鼠:勺一:灾 国 灾力口士七 M力 气朗希理游杰老.番:羽雷1岁*青笆界R审君前弱 蕾舞巍展彝城津津住除惨博像曝德法霜热恃落偿晚 Ht.乖UU或乘乘条系#乖乖案乖乖乘半粟乘乘乘乘索网乘 难 乘乖 乖 藜臬 乘p J ? 9 ? ? - 7,PN,q,7,p ; ;-*» - »0!12l34)56r7e0901122334455 - - L-3oil35f
4、i4T ys9 - 's'L'-7- - - s9 - - 1 w 1 2 L 2 ' - 2 ' - 7 ns皿品0?w限品nwnn品品口也nrt品品皆限品flplm nmrgn gnnnnuu品一寸股充品品n限rgngnnn沫皆nn品拓 - 产产产产产声.产产声产r=4J产产产产.产产产后声产产产产产产产产产产.产产芦产声.产产产产 W <"*?"个-1*5"4-<-个±<-<-个个<-<-个-4卞-个-1个小4-个十-个个个个个 - 了了 了了了了 了了了了了/了了 r-
5、了 7 了了, 了 了了了了 f 了了 彳 了一 了了了了了 7 了 C产B声产量产妻户户要卢,产漕声产常声户费卢卢塞声声要产产索户产割产凄产瞽声妻声费产 奋生生里消率重专生生消玉重生消生玉生浦酒生消生 -IBHm rT IX Frl3 .哲学家就餐.三种方法1只有双手都拿到筷子,才让其他人去拿. 1 F;原面留程我试me:专荷,看:有:胃售百,假设:莺,假设,.芍,苦假设:与鸿:假设.假设 二思用被二思二思黑思一思二翅一思鼠用思二思思二思 W #.fl驻用性格也并_:山一批洱1进5!这继许洪.一1卅#1进加.堪 零W豆冢蜃宴客宴苏零番苏或案主零零襄港董 学ini-dri"学?学学&
6、#163;£.£亍学学学学子学学±£于学学学5工£±于学lrl-y£于H- 5师品哲哲哲哲哲打畀甚哲督哲哲班拜=哲1赤募擢拜是=百近奸肺某后后r克异斜一 目含号号号三号yr=w>A信号号号三号号=>"号.巨亏号号言Mcl,blrLJH号母含另 O 3 o TW 2 2 4 11 nJ o d- m* 2 2 fl 1 1 3 Jfl o J 2 o 2 1 fl 1 4 Tl- o- 3 o(2)偶数号先拿左边筷子,再拿右边筷子.奇数先拿右边筷子,再拿左边筷子.胃力:害假设假设:岩4r :M番.节.玄节
7、备考-吉考:养者:假设假设< 落:岩 用过富二m.围二用崽 山二思 曾电 电 电 话二用3P二wws二崽二用1箕曰喜片觉购结符皆存盒本片鼻话落续寓苗转曾富富善 班声中塞班带京避事密遇索比里川SWW说趟遇里坐霍里,£*走街第遇货年罐条建JE维的迈附 壶¥友宸宏厚露起笈索金宝V友哀也声哀起玄容森森立变哀友忘,友宸夜宙宸支±究京交VSE宸友军交聂于早学£丁竽字罕T手工于字学£zn-字宇字字等T手营早th争字学宇r一干聂一,字王工丁字 富口引=*岳生也笑一:空U翁=箝幕后曰后空L妻=假设口幕=*也也哲弟=瞿口渠=*也 nfurtllrE号一%=&
8、#163;=.=之=且皆一"号£=.后芸,"=*一诈告三之二且口巨罟毛号 立 1 41 B 0 314124 -UJ2E-111 44-w qll-二彳 mi 4 040 2 12 01«! .-llm s= - r * k-E- * BrD- F&r I h PF- 一 C3E(3)最多允许四个哲学家就餐.i:楼如耀语字冢3.CKC彝患者.集思考ss.进迸雏雏进讲里维进讲维避避强道维沸雎讨继现建U徘进东家宗宗重累冢家鬟聚家MMM患犀家事家客家学学学学学字学学芋学学学学堂,学学生-萋.学芋生学r学字抄耳案呆界年黑覆晶泰工二世起蒙一哲哲护爰哲哲研年
9、=世哲哲1 4 14 0 3- o 1 4 3 1 2- 4 -U 2 3 0 13Iwh ; C4 .读写者问题.IJ G F'更苴I、法耘*建者正行写东西. 写者正站东西, 直青:正在宿立洋 读者3E在读文反 读者2正在读文* 18010: 读者:E在读文件 谈者3正行睦文4 或者2上挖读熨件 写者正右写主西.* . 与著工假设写京西 嚏雅霎甜 运读者左谈文洋 写者主在写东西.、F追吉卜.身东西 植者:正在读货件 耳读者2匚茬谈文耳 读错3正在读文斗 金读者已正佳读工三-巳与者正在写本西.一 与声正E写字酉代码.1.#include <stdio.h>#include
10、<pthread.h>#include <stdlib.h>#include <semaphore.h>sem_t s1,s2,s3,s4;void run1(void);void run2(void);void run3(void);void run4(void);void run5(void);void compute(void);int main()pthread_tt1, t2, t3, t4, t5;sem_init(&s1,0,0);sem_init(&s2,0,0);sem_init(&s3,0,0);sem_init(
11、&s4,0,0);pthread_create(&t1, NULL, run1, NULL);pthread_create(&t2, NULL, run2, NULL);pthread_create(&t3, NULL, run3, NULL);pthread_create(&t4, NULL, run4, NULL);pthread_create(&t5, NULL, run5, NULL);pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_join(t3, NULL);pthread_
12、join(t4, NULL);pthread_join(t5, NULL);return 0;void run1(void)sleep(2);printf("P1代码块开始运行.nn");sem_post(&s1);)void run2(void)(/ sleep(2);printf("P2代码块开始运行.nn");sem_post(&s2);)void run3(void)(/ sleep(2);sem_wait(&s1);sem_wait(&s2);printf("P3代码块开始运行.nn");se
13、m_post(&s3);sem_post(&s4);)void run4(void)(/ sleep(2);sem_wait(&s3);printf("P4代码块开始运行.nn"); )void run5(void)(/ sleep(2);sem_wait(&s4);printf("P5代码块开始运行.nn"); )2.#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <semaphore.h>
14、资源型信号量sem_t empty;sem_t full;可消费数产品指针int consume_index = 0;int sn = 0;存放产品指针int product_index = 0;int sum = 0;互斥型信号量sem_t semaphore_mutex;int buffer10;void consumer(void)while(1)int product;sem_wait(&full);sem_wait(&semaphore_mutex);sum-;product = bufferconsume_index;consume_index = (consume
15、_index+1)%10;printf("消费了一个产品:d ,剩余:dn",product,sum);sem_post(&semaphore_mutex);sem_post(&empty);sleep(2);void product(void)int product = sn+;while(1)(int product = sn+;sem_wait(&empty);sem_wait(&semaphore_mutex);bufferproduct_index = product;product_index = (product_index+1
16、)%10;sum+;printf("生产了一个产品:d,剩余数量:dn",product,sum);sem_post(&semaphore_mutex);sem_post(&full);sleep(1);int main()(sem_init(&full, 0, 0);sem_init(&empty, 0, 10);作为互斥锁sem_init(&semaphore_mutex, 0, 1);pthread_t t1,t2;pthread_create(&t1, NULL, consumer, NULL);pthread_cre
17、ate(&t2, NULL, product, NULL);pthread_join(t1, NULL);pthread_join(t2, NULL);return 0;3.1#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <semaphore.h>筷子互斥型信号量semt chopstick5;/取筷子互斥性信号量 sem_t mutex;void P0(void) (int i = 0;while(1) (/取筷子互斥型信号量,只有当两个筷子都抓完以后
18、,才解锁sem_wait(&mutex);取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);sem_post(&mutex);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i);)void P1(void)(int i = 1;while(1) (/取筷子互斥型
19、信号量 sem_wait(&mutex);取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);sem_post(&mutex);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i); )void P2(void)int i = 2;while(1)取筷子互斥型信号量
20、sem_wait(&mutex);取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5); sem_post(&mutex);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i); )void P3(void)int i = 3;while(1)取筷子互斥型信号量sem
21、_wait(&mutex);取左筷子sem_wait(&chopsticki);/sem_wait(&chopstick(i + 1) % 5);sem_post(&mutex);printf("%d号哲学家进餐n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.'n", i);)void P4(void)(int i = 4;while(1)(/取筷子互斥型信号量 sem_
22、wait(&mutex);取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);sem_post(&mutex);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.'n", i);)int main()(int i;pthread_t p5;for(i = 0; i &
23、lt; 5; i+)(sem_init(&chopsticki, 0, 1);sem_init(&mutex,0,1);pthread_create(&p0, NULL, P0, NULL);pthread_create(&p1, NULL, P1, NULL);pthread_create(&p2, NULL, P2, NULL);pthread_create(&p3, NULL, P3, NULL);pthread_create(&p4, NULL, P4, NULL);for(i = 0; i < 5; i+)pthread_
24、join(pi, NULL);return 0;3.2#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <semaphore.h>筷子互斥型信号量sem_t chopstick5;void P0(void)int i = 0;while(1)偶数先抓右边筷子,再抓左边筷子 取右筷子sem_wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d 号哲学家进餐.n&quo
25、t;, i); sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i);)void P1(void)int i = 1;while(1)奇数先抓左边筷子,再抓右边筷子取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki
26、);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i);)void P2(void)int i = 2;while(1)偶数先抓右边筷子,再抓左边筷子取右筷子sem_wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d 号哲学家进餐.n", i);sleep(2);sem post(&chopsticki);sem_post(&chopstick(i + 1) % 5);pri
27、ntf("%d号哲学家继续思考.n", i);)void P3(void)int i = 3;while(1)奇数先抓左边筷子,再抓右边筷子取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i); )void P
28、4(void)int i = 4;while(1)偶数先抓右边筷子,再抓左边筷子取右筷子sem_wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i); ) int main()(int i;pthread_t p5;for(i = 0; i &l
29、t; 5; i+)(sem_init(&chopsticki, 0,1);)pthread_create(&p0, NULL, P0, NULL);pthread_create(&p1, NULL, P1, NULL);pthread_create(&p2, NULL, P2, NULL);pthread_create(&p3, NULL, P3, NULL);pthread_create(&p4, NULL, P4, NULL);for(i = 0; i < 5; i+) (pthread_join(pi, NULL);) return
30、0;)3.3#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <semaphore.h>筷子互斥型信号量sem_t chopstick5;void P0(void)(int i = 0;while(1)(偶数先抓右边筷子,再抓左边筷子/sem_wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d号哲学家进餐n", i);sleep(2);sem_post(
31、&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.'n", i);)void P1(void)(int i = 1;while(1)(/奇数先抓左边筷子,再抓右边筷子取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&ch
32、opstick(i + 1) % 5);printf("%d号哲学家继续思考.'n", i);)void P2(void)(int i = 2;while(1)(/偶数先抓右边筷子,再抓左边筷子取右筷子sem_wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d号哲学家进餐n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d
33、号哲学家继续思考.'n", i);)void P3(void)(int i = 3;while(1)(奇数先抓左边筷子,再抓右边筷子取左筷子sem_wait(&chopsticki);取右筷子sem_wait(&chopstick(i + 1) % 5);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.'n", i);)void P4
34、(void)(int i = 4;while(1)(/偶数先抓右边筷子,再抓左边筷子取右筷子sem wait(&chopstick(i + 1) % 5);取左筷子sem_wait(&chopsticki);printf("%d 号哲学家进餐.n", i);sleep(2);sem_post(&chopsticki);sem_post(&chopstick(i + 1) % 5);printf("%d号哲学家继续思考.n", i);)int main()(int i;pthread_t p5;for(i = 0; i &l
35、t; 5; i+)(sem_init(&chopsticki, 0, 1);)pthread_create(&p0, NULL, P0, NULL);pthread_create(&p1, NULL, P1, NULL);pthread_create(&p2, NULL, P2, NULL);pthread_create(&p3, NULL, P3, NULL);pthread_create(&p4, NULL, P4, NULL);for(i = 0; i < 5; i+)( pthread_join(pi, NULL);)return 0;)4.读写者问题.#include <stdio.h>#include <pthre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年顺昌县医疗事业单位人员招聘笔试备考题库及答案解析
- 2026年宁晋县带编教师招聘笔试备考试题及答案解析
- 2026年塔河县医疗事业单位人员招聘考试备考题库及答案解析
- 2026年松溪县医疗事业单位人员招聘考试模拟试题及答案解析
- 2026年高台县医疗事业单位人员招聘考试参考题库及答案解析
- 2026年房县医疗事业单位人员招聘考试参考题库及答案解析
- 2026年鸡泽县带编教师招聘考试模拟试题及答案解析
- 2026年宜章县社区工作者招聘笔试模拟试题及答案解析
- 2026年普格县医疗事业单位人员招聘笔试备考题库及答案解析
- 2026年宾县医疗事业单位人员招聘笔试备考试题及答案解析
- 单位食堂食品安全管理方案
- 成都兴城投资集团有限公司成都天府乡村发展集团有限公司2026年招聘综合管理部文秘岗等岗位的考试参考题库及答案详解
- 2026广东广州市南沙区横沥镇编外人员招聘8人考试备考试题及答案详解
- 2026法检系统书记员招聘考试(书记员知识 综合知识 行测 申论)历年参考题库含答案详解3卷
- KDIGO 慢性肾脏病评估与管理临床实践指南解读 课件
- 新版(2026秋新版)部编版语文九年级上册教学计划合集
- T CCIAT 0112‑2026 灌注桩缺陷修复技术标准(征求意见稿)
- 成都市市场监督管理局所属事业单位2026年公开招聘编制外工作人员(34人)笔试备考试题及答案详解
- Unit 1 课时1 Section A 1a-1d(教学设计)英语新教材人教版九年级上册
- 大健康加盟合同范本
- 《装配式污水处理设施设计建设标准》
评论
0/150
提交评论