问题描述:多个进程共享一个数据区,这些进程分为两组:读取器进程:只读取数据区中的数据;writer进程:只向数据区写数据 满足要求允许多个reader同时进行read操作不允许多个writer同时操作不允许reader和writer同时操作Readerscanread如果已经有writer等,但是其他reader在读,reader也可以读如果writer正在写,reader必须等待如果writer执行:没有其他reader,writers,reader可以读如果是reader正在读,写者等。如果其他写者正在写,则写者等。伪代码:voidreader(void){while(TRUE){P(mutex);rc=rc+1;//只有第一个读者需要执行P(W)if(rc==1)P(w);v(互斥锁);//读操作P(mutex);rc=rc+1;//只有最后一个读者需要V(w)if(rc==0)V(w);V(互斥锁);}}voidwriter(void){while(TRUE){P(w);//写操作V(w);}}otherKnowledgepoints进程互斥:各个进程需要使用共享资源,而这些资源又需要独占使用,各个进程竞争使用这些资源。临界区:每个进程中对临界资源进行操作的程序片段。临界资源:系统中的某些资源一次只能由一个进程使用。此类资源称为关键资源或互斥资源或共享资源。第一类读写器问题解决了多个读者的问题。通过rc,可以保证读者同时进行读操作,而不是多次进行pv操作。其他操作都是基于写不可读,读不可写。不存在多个writer同时存在的问题。应用场景Linux的IPX路由代码使用读写锁,路由表读取多于路由表更新。
