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

时间:2015-02-17 04:25:11

标签: c process operating-system fork

所以我想弄清楚这个家庭作业的逻辑。有人可以帮忙吗?根据我的理解,我必须创建2个进程,从给定文件中读取N并将N数字递增1.我不理解的部分是如何将这两个进程分配为奇数和偶数整数做同样的事情。

  

编写一个简单的序列号系统,通过该系统,两个进程P1和P2每个都可以获得50个唯一的整数,这样一个接收所有奇数,另一个接收所有偶数。使用fork()调用来创建P1和P2。给定一个包含单个数字的文件F,每个进程必须执行以下步骤:   

  一个。打开F.
  湾从文件中读取序列号N   C。关闭F.
  d。输出N和过程'PID(在屏幕或测试文件上)   即增加N乘以1   F。打开F.
  G。将N写入F.
  H。冲洗F.
  一世。关闭F

2 个答案:

答案 0 :(得分:1)

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

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

为了保证交替进程,信号量本身可能还不够。您可能还需要具有共享内存之类的内容,以指示下一个应该读取文件的进程(奇数或偶数)。

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

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

请记住在分叉两个进程之前设置共享内存


另一种可能性是使用建议锁定调用{​​{1}},因此一次只能有一个进程访问该文件。

答案 1 :(得分:0)

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

在另一个过程中,反转奇数/偶数。