我编写了一个程序,该程序(除其他外)创建子进程,并通过侦听它们的stdout接收来自它们的通知。这种进程间通信机制很好,但我正在与死锁作斗争。
我想我可以使用Boost.Asio(我已经在程序的其他部分中使用它来实现网络)及其Proactor Pattern实现,使我的程序(主要)成为单线程的。这样一来,我就不必再为线程同步而烦恼了。
要做到这一点,我的猜测是,我必须编写一个自定义的AsyncReadStream类型(它将在线程中调用Windows的ReadFile()),我可以将其与asio::async_read_*()函数一起使用。我的问题是,我不知道如何实现AsyncReadStream概念的async_read_some()成员函数。我应该如何处理函数接收的MutableBufferSequence引用?
这是正确的方法吗?如果是,我应该如何实现async_read_some()?或者这不是正确的方法,我除了写一个完整的定制服务别无选择?
通过管道的进程间通信在Boost.Process中实现。尽管该库还不是Boost的一部分。