信号量互斥题目
信号量机制例题集2

爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。如果理发 师正在理发时又有顾客来到,那么,如果 又有空椅子可坐,顾客就坐下等待,否则 就离开理发店。
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }
C语言 信号量 同步与互斥 生产者消费者 互斥锁 读写者问题 哲学家就餐问题

《操作系统原理》
上机作业(报告)作业:信号量机制
要求其中P1~P5代表5个代码块,每个代码块分别由1个线程运行模拟,每个代码块执行时分别可以打印输出该代码块的名称(P1~P5),每个
代码块运行时需要睡眠(sleep())一定时间。
(2)利用多线程编程和信号量机制模拟生产者消费者问题(多生产
者和多消费者)。
(3)利用多线程编程和信号量机制模拟哲学家就餐问题,至少实现1
种不会出现死锁的方案。
(4)利用多线程编程和信号量机制模拟读写者问题。
【实验要求】可选编程语言:C/C++/Java/C#/Python;
一个小题实现在同一个程序文件中(C/C++);
请适当注释;
报告正文(运行屏幕截图及源代码)
一.截图。
1.
2.
3.哲学家就餐。
(三种方法)
(1)只有双手都拿到筷子,才让其他人去拿。
(2)偶数号先拿左边筷子,再拿右边筷子。
奇数先拿右边筷子,再拿左边筷子。
(3)最多允许四个哲学家就餐。
4.读写者问题。
第21 页共21 页。
同步互斥习题

填空题
1. 信号量的物理意义是当信号量值大于 零是表示 ① ;当信号 量值小于零时,其绝对值为 ② ;
① 可用资源数目 ② 因请求该资源而被阻塞的进程数目
填空题
2. 临界资源的概念是 而临界区是指 ② ① ; ;
① 一次仅允许一个进程访问的资源 ② 进程中访问临界资源的那段程序代码
填空题
3. 若一个进程已进入临界区,其它欲进 入临界区的进程必须① ; ① 等待
如果进程对信号量S执行signal操作, 则信号量S的值将 ( )。 A:加1 B:减1 C:等于0 D:大于0
设与某资源相关联的信号量初值为3, 当前值为1,若M表示该资源的可用个数 ,N表示等待资源的进程数,则M,N分别 是( ) A:0,1 B:1,0 C:1,2 D:2,0
注:本题为2010年全国考研题
选择题
4、进程间的同步是指进程间在逻辑上的 相互()关系 A. 联接 B. 制约 C. 继续 D. 调用
选择题
5、()是一种只能进行wait和signal操作 的特殊变量 A. 调度 B. 进程 C. 同步 D. 信号量
选择题
6、在操作系统中,解决进程间的()和()问 题的一种方法是使用() A. 调度 B. 互斥 C. 通讯 D. 同步 E. 分配 F. 信号量
在多进程的系统中,为了保证公共变 量的完整性,各进程应互斥进入临界区, 所谓临界区是指( )。 A:一个缓冲区 B:一段数据区 C:同步机制 D:一段程序
以下关于临界资源的叙述中,正确的 是( )。 A:临界资源是非共享资源 B:临界资源是任意共享资源 C:临界资源是互斥共享资源 D:临界资源是同时共享资源
第四章
习题
选择题
1、若P、V操作的信号量S初值为2,当前 值为-1,则表示有()等待进程 A. 0个 B. 1个 C. 2个 D. 3个
互斥信号量问题

parend
end
哲学家进餐问题1. 利用记录型信号量解决哲学家进餐问题
放在桌子上的筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信号量表示一只筷子,五个信号量构成信号量数组。
Var chopstick: array [0, …, 4] of semaphore;
所有信号量均被初始化为1。第i 位哲学家的活动可描述为:
repeat
wait(chopstick[ i ]);
wait(chopstick[ ( i +1) mod 5] );
s=1:无进程进入临界区;
s=0:有一个进程进入临界区;
s=-1: 有一个进程在临界区,另一个进程等待进入临界区。
对于n个并发进程,信号量S可取值的范围是: 1~ -(n-1),当S<0时,表示有一个进程已进入临界区,而且还有|S|个进程正在等待进入临界区,它们处于等待队列中。
consume the item in nexc;
until false;
end
perform write operation;
signal(wmutex);
until false;
until false;
end
Writer : begin
repeat
wait(wmutex);
end
consumer : begin
repeat
Swait(full, mutex);
begin
parbegin
Reader : begin
repeat
wait(rmutex);
进程同步互斥练习

1.如果信号量S的初值是5,现在信号量的值是-5,那么系统中的相关进程至少执行了几个P(S)操作?与信号量S相关的处于阻塞状态的进程有几个?为使信号量S的值大于0,应进行怎样的操作?答案:1)5-(-5)=10,因此系统中的相关进程至少执行了10个P(S)操作。
因为每执行一次P(S)操作就会将信号量S减去1。
2)与信号量S相关的处于阻塞状态的进程有|-5|=5个。
3)为使信号量S的值大于0,应当有至少6个执行了P(S)但还没来得及执行V(S)的进程去执行V(S)操作。
2.一售票厅只能容纳300人,当少于300人时,可以进入;否则,需在外等候。
若将每一个购票者作为一个进程,请用P、V操作编程,并写出信号量的初值。
答案:设置信号量NUM表示售票厅当前还可以进入的人数,初值为300.购票者进程:do{P(NUM);进入售票厅;V(NUM);} While(1);3.桌上有一空盘,只允许存放一个水果。
爸爸可向盘中放苹果,也可向盘中放桔子。
儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘中空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
答案:设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。
同步描述如下:int S=1; int Sa=0; int So=0;main( ){father();son();daughter();}father(){while(1){P(S );将水果放入盘中;if (放入的是桔子)V(So);else V(Sa);}} son( ){while(1){P(So);从盘中取出桔子;V(S);吃桔子;}}daughter( ){while(1){P(Sa);从盘中取出苹果;V(S);吃苹果;}}4.下面是两个并发执行的进程。
它们能正确执行吗?若不能,试改正之。
用信号量机制来解决进程的同步与互斥:PV操作

用信号量机制来解决进程的同步与互斥:PV操作首先确定进程间的关系,然后确定信号量及其值。
判断进程间是否互斥的关键:看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。
确定信号量的值是一个关键点,它代表了可用资源实体数。
举例:票大厅容纳的人数限制为20人,少于20人时购票者可以进入,否则要在厅外等候。
进程间是同步时:是否存在合作关系,是否需要互通消息首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。
举例:公交车上司机与售票员的行为,司机到站停车后,售票员方可开门,售票员关门后,司机方可开车。
进程同步应用示例讲解:1桌上有一个盘子,可以存放一个水果。
父亲总是把苹果放在盘子中,母亲总是把香蕉放在盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。
1)系统要设几个进程来完成这个任务?各自的工作是什么?2)这些进程间有什么样的相互制约关系?3)用P,V操作写出这些进程的同步算法(注:标明信号量的含义)。
1)需要四个进程进程描述:Father:父亲放置苹果的进程;Mother:母亲放置香蕉的进程;Son:儿子吃香蕉的进程;Daughter:女儿吃苹果的进程。
分析:四人公用一个盘子;盘子每次只能放一个水果,当盘子为空时,父母均可尝试放水果,但一次只能有一人成功;盘中是香蕉,儿子吃,女儿等;盘中是苹果,女儿吃,儿子等。
2)进程之间既有互斥又有同步关系。
Father进程和Mother进程要互斥的向盘中放水果,应设置一互斥信号量dish,初值为1,表示盘子为空;Father进程要设置同步信号量apple,用于给Daughter进程传送消息,初值为0,表示还没有消息产生,即没有放苹果;相应Daughter进程也要向父、母进程传送盘子为空的消息。
Mother进程要设置同步信号量banana,用于给Son进程传送消息,初值为0,表示还没有消息产生,即没有放香蕉。
操作系统习题第四章

第四章互斥、同步与通讯一、单项选择题1.一个正在访问临界资源的进程由于申请等待I/O操作而被中断时,__________.A.可以允许其他进程进入与该进程相关的临界区B.不允许其他进程进入任何临界区C. 可以允许其他就绪进程抢占处理器,继续运行D.不允许任何进程抢占处理器2.两个并发进程之间______A 一定存在互斥关系B 一定存在同步关系C 一定彼此独立无关D 可能存在同步或互斥关系3.为了使两个进程能同步运行,最少需要_______个信号量。
A 一B 二C 三D 四4.共享变量是指__________访问的变量。
A. 只能被系统进程B. 只能被多个进程互斥C. 只能被用户进程D. 可被多个进程5.临界区是指并发进程中访问共享变量的__________.A.管理信息 B.数据 C.信息存储 D.程序段6.设有三个进程共享一个资源,如果每次只允许一个进程使用该资源,则用PV操作管理时信号量S的可能取值是___________A.1,0,-1,-2B.2,0,-1,-2C.1,0,-1D.3,2,1,07.进程的并发执行是指若干个进程__________.A. 同时执行B. 在执行的时间上是重叠的C. 在执行的时间上是不可重叠的D. 共享系统资源8.在进程通信中,__________常用信件交换信息。
A.低级通信 B.高级通信 C.消息通信 D.管道通信9.实现进程同步时,每一个消息与一个信号量对应,进程_________可把不同的消息发送出去。
A.在同一信号量上调用P操作B.在不同信号量上调用P操作C.在同一信号量上调用V操作D.在不同信号量上调用V操作10._________是只能有P和V操作所改变的整形变量。
A.共享变量B.锁C.整型信号量D.记录型信号量11.在执行V操作时,当信号量的值_________时,应释放一个等待该信号量的进程。
A.大于0B.小于0C.大于等于0D.小于等于012.进程和程序的主要区别是__________.A.占用处理器和不占用处理器B.占用主存和不占用主存C.动态和静态D.连续执行和非连续执行13.有三个进程P1,P2,P3共享同一个程序段,而每次最多允许两个进程进入该程序段,则信号量S的初值为___________.A. 0B. 1C. 2D. 314.若P、V操作的信号量S初值为2,当前值为-1,则表示有_________等待进程。
线程同步(信号量,互斥,条件变量)

线程同步(信号量,互斥,条件变量)收藏进行多线程编程,最头疼的就是那些共享的数据。
因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法得知那个线程会先运行,哪个线程会后运行。
下面介绍一些技术,通过他们,你会合理安排你的线程之间对资源的竞争。
l 互斥量Mutexl 信号灯Semophorel 条件变量Conditions先说一下互斥量。
什么时候会用上互斥量了?比如你现在有一全局链表,你有几个工作线程。
每一个线程从该链表中取出头节点,然后对该头节点进行处理。
比如现在线程1正在取出头节点,他的操作如下:Item * p =queue_list;Queue_list=queue_list->next;Process_job(p);Free(p);当线程1处理完第一步,也就是Item *p=queue_list后,这时候系统停止线程1的运行,改而运行线程2。
线程2照样取出头节点,然后进行处理,最后释放了该节点。
过了段时间,线程1重新得到运行。
而这个时候,其实p所指向的节点已经被线程2释放掉,而线程1对此毫无知晓。
他会接着运行process_job(p)。
而这将导致无法预料的后果!对于这种情况,系统给我们提供了互斥量。
你在取出头节点前必须要等待互斥量,如果此时有其他线程已经获得该互斥量,那么线程将会阻塞在这个地方。
只有等到其他线程释放掉该互斥量后,你的线程才有可能得到该互斥量。
为什么是可能了?因为可能此时有不止你一个线程在等候该互斥量,而系统无法保证你的线程将会优先运行。
互斥量的类型为pthread_mutex_t。
你可以声明多个互斥量。
在声明该变量后,你需要调用pthread_mutex_init()来创建该变量。
pthread_mutex_init的格式如下:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex-attr_t *mutexattr);第一个参数,mutext,也就是你之前声明的那个互斥量,第二个参数为该互斥量的属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试用用信号量机制描述两人下象棋的过程。
两人下象棋的过程可以概括为:一开始只能是“红先黑后”,以后两人要循环轮流走子,直至某一方获胜或双方和棋为
止。
•
这是个只有一个生产者和一个消费者的生产者——消费者问题,是个典型的“你等我,我也等你”的问题。
红方是总的前趋任务——生产者进程,黑方是总的后继任务——消费者进程,但由于下棋过程必须轮流走子,所以红黑双方的生产者消费者身份会轮流改变。
棋盘则是生产者与消费者共享的缓冲。
•要求:只描述对弈过程,对棋盘的访问不做描述。
二人对弈过程是个纯粹的同步过程
①所用信号量设臵如下:
Ⅰ)同步信号量hei,初值为1,表示黑方已走子,开始时可使红方先行不受阻。
Ⅱ)同步信号量hong,初值为0,表示红方尚未走子,开始时可使黑方先行受阻。
用信号量机制描述的二人下象棋过程如下
有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:
(1)为描述读者的动作,应编写几个程序,设臵几个进程?(2)试用P、V操作描述读者进程之间的同步关系。
分析:•读者的动作都是一样的:登记进入阅览室,阅读,
撤消登记离开阅览室,因此可写一个程序,设n个进程。
•读者共享的资源有阅览室的座位和登记表,因此诸
个读者进程之间有两种互斥制约关系,需设2个信号量来实现:• seat:用于实现诸读者对阅览室的空闲座位的互斥
竞争,初值为100;
• mutex:用于实现诸读者对登记表的互斥访问,初值
为1
(1)可写一个程序,设n个进程
(2)读者进程readeri(i=1,2,3,……)描述如下:
P(seat); /*申请空座位*/
P(mutex); /*申请登记*/
登记;
V(mutex) /*允许其他读者登记*/
阅读;
P(mutex); /*申请撤消登记*/
撤消登记;
V(mutex); /*允许其他读者撤消登记*/ V(seat); /*释放座位,允许他人进入*/。