人。对于学术练习,我必须在c语言中为nix平台实现一个程序,该程序通过信号处理来同步多个进程,仅使用信号,暂停,终止和分叉基本函数。 我搜索谷歌,还没有找到任何明确的例子:我希望你们中的一个人的智慧会照亮我的方式。 谢谢!如何通过基本信号处理同步c中的多个进程
回答
pause
直到收到信号才会返回。基本设计是这样的:
fork
在每个工人创造必要的工作人员- 抓
SIGINT
。该处理程序设置一个标志,意味着该进程在完成当前工作后应该退出。 - 每个过程都可以工作,然后
pause
s。重复,除非收到SIGINT
(在pause
之后&之前的测试)。 - 当一个过程具有可用于另一过程的工作,它用信号与
SIGCONT
- 其他进程存在对过程中没有更多的工作时,与SIGINT信号它。
这并不完全包括对共享数据的同步访问。当一个进程信号的另一个工作是可用的,它应该pause
当然,这恰恰违背了并发编程的目的
- :要做到这一点,你可以添加额外的规则。由于大多数系统调用被信号中断(导致它们返回-1,其中
errno
设置为EINTR
),因此您必须处理这种意外情况,重复每个受影响的系统调用,直到成功为止。例如:while ((readCount = read(...)) < 0 && errno == EINTR) {}
我用类似的设计完成了练习,谢谢! – jneira 2010-05-05 05:31:34
虽然这似乎是一个好主意,但如果两个进程在短时间内都发送一个其他进程为SIGCONT,则该进程可能会失败,因为该进程可能只会收到一个SIGCONT,从而“失去”第二个工作(请参阅我的文章细节)。通过给每个工作人员一个“队列”作业并将SIGCONT的解释从“作业已准备就绪”更改为“至少有一个作业已准备就绪”,可以解决此问题,但这需要能够自动更新队列...在循环中使用文件系统重命名可能实现? – 2010-05-05 05:50:10
@j:这是'SIGCONT'在我的大纲中的功能:打破'暂停'。请注意,“每个流程都可以运行。” “暂停”和“SIGCONT”仅仅是为了防止忙碌等待。 – outis 2010-05-05 09:15:23
需要注意的一件重要的事情是,Linux(至少和可能还有很多其他Unices)可以将同一类型的多个信号合并为一个实例。因此,如果您发送一个处理值为x的信号,则该过程将被保证接收;但是如果您发送两个或更多值为x的信号,则该过程只能保证至少接收其中一个信号。
另外,信号不保证按照发送顺序接收信号。 (为什么?在引擎盖下,Linux为每个进程记录哪些未完成的信号已经发送,每当进程被调度程序唤醒时,为所有未完成信号的信号处理程序以任意顺序运行。 )
这一切意味着信号通常不适合同步过程。它们只在信号之间的时间间隔相对于接收过程的唤醒时间之间的间隔较大时才可靠地工作。如果一个过程花费了很多时间,唤醒事件可以任意分开。
结论:不要使用IPC的信号。
- 1. 如何通过到达的顺序处理多个信号C
- 2. 处理同步信号
- 3. C多个进程之间的UNIX信号量同步
- 4. shell/kernel如何处理信号发送到同一进程组中的进程?
- 5. 多线程信号处理
- 6. 单个信号量的多进程同步
- 7. 可以通过进程sighandler处理linux信号SIG_KILL吗?
- 8. 多线程Python中的信号处理
- 9. 处理多个信号
- 10. Python多处理进程号
- 11. 如何通过不同的.net(c#)线程处理多个SQL事务
- 12. 信号处理 - 异步函数和多线程应用程序,信号栈
- 13. 使用信号量同步进程
- 14. 处理异步信号在多线程程序
- 15. 仅限于主进程的C Linux信号处理程序
- 16. 如何注册子进程的信号处理程序?
- 17. 如何处理多个TCP客户机进行通信
- 18. 多进程同步 - 比信号量更好的选择?
- 19. 多线程,线程间通信,同步
- 20. nodejs子进程信号处理
- 21. 处理信号后Perl进程崩溃
- 22. 当进程在waitpid中等待时如何处理信号?
- 23. 用多个进程注册的处理程序发出一个信号
- 24. Python多处理 - 通过多个进程修改JSON
- 25. C:信号处理和信号灯
- 26. 严格的使用2个信号灯的N进程同步
- 27. C - 获取信号处理的进程ID
- 28. 发送和处理带子进程信号的问题C
- 29. 如何使用信号量同步进程
- 30. 与信号进程通信
哎呀,虐待狂教授警惕。他有没有听说过锁和信号灯? – 2010-05-04 06:01:38
@atreyu:“flock”怎么样(http://linux.die.net/man/2/flock)? – outis 2010-05-04 06:32:15
感谢您的反馈: @Keith信号量在下一个练习中,这只是为了教育 - 虐待目的 @outis好点,但我害怕我只能使用信号处理的基本功能 – jneira 2010-05-04 06:37:50