我听说在程序中混合分叉和线程可能会产生很大的问题,通常会导致神秘的行为,尤其是在处理共享资源时,例如锁、管道、文件描述符。但我从来没有完全理解危险到底是什么,什么时候会发生。如果有该领域专业知识的人能够更详细地解释什么是陷阱以及在这样的环境中编程时需要注意什么,那就太好了。
例如,如果我想编写一个从各种不同资源收集数据的服务器,我想到的一个解决方案是让服务器产生一组线程,每个线程都会调用另一个程序来完成实际工作,打开管道从孩子那里取回数据。这些线程中的每一个都响应自己的工作,它们之间没有数据交换,并且当收集数据时,主线程有一个队列,这些工作线程只会将结果放入队列中。这个解决方案会出现什么问题?
请不要仅通过“回答”我的示例场景来缩小您的答案。任何与示例无关但有助于提供简洁设计的建议、替代解决方案或经验都会很棒!谢谢!