读写问题
读写程序问题与多个进程之间共享的对象(例如文件)有关。这些过程中的一些是读取器,即他们只想从对象中读取数据,而某些过程是写入器,即他们想写到对象中。
读者-作家问题用于管理同步,因此对象数据没有问题。例如-如果两个读取器同时访问对象,则没有问题。但是,如果两位作者或一位读者和一位作家同时访问该对象,则可能会出现问题。
为了解决这种情况,写者应该获得对对象的独占访问权,即当写者正在访问对象时,任何读者或写者都不能访问该对象。但是,多个阅读器可以同时访问该对象。
可以使用信号量来实现。读写器问题中的读写器过程代码如下:
读流程
下面给出了定义阅读器过程的代码-
wait (mutex); rc ++; if (rc == 1) wait (wrt); signal(mutex); . . READ THE OBJECT . wait(mutex); rc --; if (rc == 0) signal (wrt); signal(mutex);
在上面的代码中,互斥量和wrt是被初始化为1的信号量。此外,rc是被初始化为0的变量。互斥量信号量确保相互排斥,并且wrt处理写入机制,并且是读写器过程代码的共同点。。
变量rc表示访问该对象的读取器的数量。一旦rc变为1,就在wrt上使用等待操作。这意味着编写者无法再访问该对象。读操作完成后,rc递减。当re变为0时,在wrt上使用信号操作。因此,编写者现在可以访问该对象。
写流程
下面给出了定义编写器过程的代码:
wait(wrt); . . WRITE INTO THE OBJECT . signal(wrt);
如果编写者要访问该对象,则在wrt上执行等待操作。此后,其他任何编写者都无法访问该对象。当写程序写完对象后,将在wrt上执行信号操作。