在linux中并行处理

Cou*_*ero 6 c linux multithreading

我不确定如何处理我正在编写的程序中的异步任务,我希望有经验的人至少可以指出我正确的方向.

我在嵌入式ARM处理器上运行Angstrom Linux.我的程序通过暴露的硬件PWM和PTP上的摄像头控制多个伺服系统.此外,它是套接字守护程序,它从任意客户端(在此实例中为Android)中获取命令.相机PTP很慢,我不想等待它完成任务,因为程序的其余部分需要响应.

我已经尝试过线程,但相机线程中的任何问题似乎都会破坏整个过程.理想情况下,我想自己发送相机来做它的事情,当它完成时让主功能知道.这是一种合适的分叉技术还是我实施了不正确的线程?

另外,我想远离大型二级库,以避免我已经拥有的任何交叉编译问题.在此先感谢您的任何建议.

Duc*_*uck 1

采用 steveha 答案的基本方法,但跳过 init(8) 和命名管道。

fork()包含您的相机代码并通过常规管道或域套接字进行通信的子项。在父级中为 SIGCHLD 编写一个信号处理程序。如果子级死亡,请使用返回代码询问原因wait()。如果它自行死亡,则清理并重新启动它;如果正常结束,则执行该情况下适当的操作。通过您最终选择的 IPC 与孩子进行交流。与域套接字或管道相比,这使您可以更好地控制子级init,特别是,可以更轻松地在父级和子级之间进行设置和通信,而不是弄乱 FIFO 的时髦语义。

当然,如果相机代码确实存在问题,您真正所做的就是通过不删除整个程序来使故障更易于管理。理想情况下,如果您有能力的话,您应该让相机代码完美地工作。