📄 读者写者程序.txt
字号:
读者-写者问题(reader and writer problems)2007-09-11 23:09哲学家问题对于多个竞争进程互斥地访问有限资源(如I/O设备)这一类问题的建模十分有用。另一个著名的问题是读者-写者问题,它为数据库访问建立了一个模型。例如,设想一个飞机定票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读是可以接受的,但如果一个进程正在更新数据库,则所有其他进程都不能访问数据库,即使读操作也不行。这里的问题是:如何对读者和写者进行编程?图2-19给出了一种解法。
typedef int semaphore;
semaphore mutex=1; /* control access RC */
semaphore db=1; /* control access database */
int rc=0; /* number of process reading */
void reader(void)
{
while(TRUE){ /* loop */
down(&mutex); /* block access rc */
rc = rc+1; /*add one more reader*/
if(rc == 1)
down(&db);
/*if it is first reader,than...*/
up(&mutex); /*resume access rc*/
read_data_base(); /*access db*/
down(&mutex); /*block access rc*/
rc = rc -1; /*decrease reader*/
if(rc==0)
up(&db);
/*if this is last reader, than......*/
use_data_read(); /*critical region */
}
}
void writer(void)
{
while(TRUE)
{
think_up_data(); /*critical region operation*/
down(&db); /*block access db*/
write_data_base(); /*upgrade access*/
up(&db); /*resume access*/
s}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -