哲学家进餐问题
几种可能解决死锁问题的方法
至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能进餐,仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐,规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。
利用AND信号量机制解决哲学家进餐问题
在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本质上就是前面所介绍的AND同步问题,故用AND信号量机制可获得最简洁的解法
semaphore chopstick [5]= [1,1,1,1,1];
do{
…
//think;
…
Swait(chopstick[(i+1) % 5], chopstick[i]);
…//eat; …
Ssignal(chopstick[(i+1) % 5], chopstick[i]);
}while(TRUE);
读者—写者问题
2个售票处.
Bi的新值是X-1,而不是X-2。这里的P1和P2均为写者,对于写者而言,Bi是临界资源,因此写者之间应该互斥地访问Bi 。
问题描述:
对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个
“读-写” 互斥,
“写-写” 互斥,
“读-读” 允许
一个数据文件或记录可被多个进程共享,读该文件的进程称为“Reader进程”,其他进程称为“Writer进程”,允许多个进程同时读一个共享对象,因为读不会使数据文件混乱,不允许一个Writer进程和其他Reader进程或Writer进程同时访问一个对象.
利用记录型信号量解决读者-写者问题思想:
为实现Reader与Writer进程间在读或写时的互斥而设置了一个互斥信号量Wmutex。
设置一个整型变量Readcount表示正在读的进程数目
Readcount是一个可被多个Reader进程访问的临界资源,因此,应该为它设置一个互斥信号量rmutex。
仅当Reader进程在执行了readcount减1操作后其值为0时,才须执行signal(wmutex)操作,以便让Writer进程写。
只要有一个Reader进程在读,便不允许Writer进程去写。因此,仅当readcount=0,表示尚无Reader进程在读时,Reader进程才需要执行wait(wmutex)操作;若wait(wmutex)操作成功,Reader进程便可去读,相应地,做readc
操作系统 第二章进程控制与描述知识点总结(4)
最新推荐文章于 2024-04-01 00:40:23 发布
哲学家进餐问题几种可能解决死锁问题的方法至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能进餐,仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐,规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。利用AND信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本质上就是前面所介绍的AND同步问题,故用AND信号量机制可获得最简洁
摘要由CSDN通过智能技术生成