C - 创建两个获得 50 个唯一整数的进程

C - Creating two processes which obtains 50 unique integers

所以我想弄清楚这个家庭作业的逻辑。有人可以帮忙吗?据我了解,我必须创建 2 个进程,从给定文件中读取 N 并将 N 数字递增 1。我不明白的部分是,当这两个进程都是做同样的事情。

Write a simple sequence-number system through which two processes, P1 and P2, can each obtain 50 unique integers, such that one receives all the odd and the other all the even numbers. Use the fork() call to create P1 and P2. Given a file, F, containing a single number, each process must perform the following steps:

a. Open F.
b. Read the sequence number N from the file.
c. Close F.
d. Output N and the process' PID (either on screen or test file).
e. Increment N by 1
f. Open F.
g. Write N to F.
h. Flush F.
i. Close F

这两个过程可以相似但不完全相同。在每个进程中,开始时都有一个循环,从文件中读取 N。在一个过程中,如果 N 是奇数则继续,但如果 N 是偶数,则休眠一秒钟然后返回循环的开始。

在另一个过程中,反转上面的odd/even。

如果没有某种形式的进程间通信 (IPC),就没有真正的方法来保证单个进程不会连续两次执行其读-增量-写操作,从而最终输出even/odd对。

所以我的建议是开始阅读 IPC,信号量将是一个好的开始。

为了保证交替进程,信号量本身可能是不够的。您可能还需要共享内存之类的东西,它指示接下来应该读取文件的进程(奇数或偶数)。

在那种情况下,每个进程都会获取信号量并检查共享内存。如果轮到它 运行,它应该执行文件操作,更改共享内存然后释放信号量。如果 不是 轮到 运行,它应该释放共享内存并重试。

当然,这会引入活锁的可能性,因此如果您要释放信号量,可能有必要引入一个(非常)短的延迟,因为这不是您的时间。

并记得在 分叉两个进程之前 设置共享内存。


另一种可能性是使用咨询锁定调用flock,这样一次只有一个进程可以访问该文件。