【发布时间】:2020-05-28 07:10:16
【问题描述】:
我需要为我的操作系统类解决并发分配问题。我不想要这里的解决方案,但我缺少一个部分。
我们应该编写一个写入文件、读取文件然后删除文件的进程。这个过程我们应该在两个不同的 shell 中运行两次。为简单起见,这里没有分叉。进程 A 应该写入,进程 B 然后读取,然后进程应该删除文件。之后他们互换角色。
我知道您可以通过锁定轻松实现原子性。使用 while 循环围绕读取和写入部分等,您还可以获得进一步的控制。但是当我运行进程 A 然后进程 B 时,进程 B 将在写入部分之前旋转,直到它获得锁定并且在进程 A 释放锁定时不会进入读取。所以我最好的猜测是有一个读写锁。这些信息必须在进程之间以某种方式共享。我能想到的唯一方法是一些全局变量,但由于两个进程都持有变量的副本,我认为这是不可能的。另一种方法是拥有一个读锁定文件和一个写锁定文件,但这对我来说似乎过于复杂。
有没有更好的办法?
【问题讨论】:
-
使用共享内存。
-
进程间通信有多种方式。一些搜索词是:共享内存、管道和套接字。
-
我认为我们需要使用共享内存。那么当我启动两个进程时,指针会指向同一个内存部分吗?
-
不,您必须向操作系统请求一些共享内存。您还必须确保两个任务不会同时访问内存(例如使用某种形式的锁定)。使用信号量会更有意义。
-
好吧,我们不允许使用信号量。我们只需要通过文件锁来实现这一点