考虑一条河上的单向桥。只要有 2 艘船在桥前聚集,桥就会升起。有必要根据条件使用信号量并通过文件传递参数来实现汽车/船舶的移动。
形式上,我理解在这项任务的框架内,有必要创建流程——汽车和船。通过信号量使它们同步,信号量在 Unix 中的 . 但是,我以前从未在这方面工作过,所以我需要外界的帮助。
具体来说,解决问题的方法很有趣。如果可能的话,也许有人能够分享类似问题的解决方案或解决这个问题的建设性大纲。
考虑一条河上的单向桥。只要有 2 艘船在桥前聚集,桥就会升起。有必要根据条件使用信号量并通过文件传递参数来实现汽车/船舶的移动。
形式上,我理解在这项任务的框架内,有必要创建流程——汽车和船。通过信号量使它们同步,信号量在 Unix 中的 . 但是,我以前从未在这方面工作过,所以我需要外界的帮助。
具体来说,解决问题的方法很有趣。如果可能的话,也许有人能够分享类似问题的解决方案或解决这个问题的建设性大纲。
事先,我想指出,如果你尝试通过 pthread(man 7 pthreads)和互斥体/信号量来实现任务,你肯定会头疼。使用 linux 中已有的同步机制要容易得多:
在我看来,任务的实现最容易看起来像这样:
如果消息来自拥有通行权的人,则计数器不会增加。
当指定条件发生时,调度程序切换桥接状态并重置相应的计数器。
实际上 - 一切......非常简单!这是因为没有使用信号量等原始同步机制。
有关详细信息,我推荐:William Stevens;“Unix。进程的交互”,第 4、5 和 6 章。
如果我们严格遵守问题陈述,那么实现(以最一般的形式)可能看起来像这样:
顺便说一句,从问题的陈述来看,完全不清楚如何将桥恢复到原来的位置。
这就是我所说的关于 POSIX 信号量的全部内容。您可以对 System-V 信号量执行相同的操作。那里的一切都更复杂,但是 - 更有趣:-)
最后一点。从 POSIX 2001 开始,标准中有一个非常适合您的任务的功能 - pthread_cond_init()条件变量。如果你好奇,就来看看吧!