当前位置: 首页 > 编程笔记 >

读写问题

宗政英才
2023-03-14
本文向大家介绍读写问题,包括了读写问题的使用技巧和注意事项,需要的朋友参考一下

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

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

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

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

读流程

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

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

 类似资料:
  • 我有一个关于Firestore数据库中读/写的问题。情况是: 我有一个集合“城市”(例如20个城市),它有一个子集合“餐厅”(例如500家餐厅): 现在我的问题是:当我想得到一个城市中的所有餐厅时,FiRecovery会支付多少次读取费用?500? 当我想添加一家餐厅时:是否只需要写一封信就可以将此文档添加到子集合中?

  • 问题内容: 我正在尝试通过URLConnection上传文件,但是我需要将其读取/写入为二进制文件,而无需进行任何编码更改。 所以我试图从读取数组,但是现在我有一个问题。我用于输出到服务器的对象不允许我执行操作(类型为)。我怎样才能解决这个问题?还是有另一种快速将二进制数据从a复制到a的方法? 谢谢 问题答案: 对象(包括)专门用于输出字符数据。听起来您想要这里而不是这里。 你是哪里人 如果它是通

  • 我正在尝试使用react-native-NFC-Manager在我的react-本机应用程序中添加NFC功能,它工作正常。但问题是我第一次无法读取/写入NFC卡。第一次,我需要使用NFC工具应用程序编写一个新标签,将“NdeFormatable”转换为“Ndef”,否则我无法读取/写入NFC卡 我用这段代码写数据: 这个问题有什么解决办法吗?

  • 本文向大家介绍C#读写EXCEL单元格的问题实现,包括了C#读写EXCEL单元格的问题实现的使用技巧和注意事项,需要的朋友参考一下 最近, 我在用C#开发一个EXCEL Add-In的时候,发现了一些害人不浅的坑,特来总结列举如下: 这里我读写EXCEL引用的是using Excel = Microsoft.Office.Interop.Excel;  问题一、如何判断一个单元格去除首尾空格后是不

  • 我试图从TXT文件中读取数据,但出现了一些问题。有一个密码 这是代码从官方documentation.also我试图改变路径到我的文件在文件(")喜欢(资产/file.txt)但仍然没有工作。我得到这个错误后启动程序 我知道我需要在pbuspec添加资产。yaml文件,我做到了。当我从服务中使用rootBundle时也是如此。dart,读取此文件。txt,一切正常,我可以从中读取数据。

  • 我对这段代码有一个问题。这是典型的读者-作家问题。我按照这个维基百科页面上的伪代码找到了第一个让作者挨饿的问题。我想知道我实际上是如何注意到作家们正在挨饿的。 我试着把shared_variable的打印声明放在不同的地方,但这并没有给我太多的洞察力。但也许我只是不明白发生了什么。有人能向我解释一下我是如何直观地看到饥饿发生的吗?谢谢你!读取器或写入器尝试读取或写入的次数作为命令行参数给出。