读写问题

读写程序问题与多个进程之间共享的对象(例如文件)有关。这些过程中的一些是读取器,即他们只想从对象中读取数据,而某些过程是写入器,即他们想写到对象中。

读者-作家问题用于管理同步,因此对象数据没有问题。例如-如果两个读取器同时访问对象,则没有问题。但是,如果两位作者或一位读者和一位作家同时访问该对象,则可能会出现问题。

为了解决这种情况,写者应该获得对对象的独占访问权,即当写者正在访问对象时,任何读者或写者都不能访问该对象。但是,多个阅读器可以同时访问该对象。

可以使用信号量来实现。读写器问题中的读写器过程代码如下:

读流程

下面给出了定义阅读器过程的代码-

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上执行信号操作。