进程间通信在Windows客户端中也经常会有用到,很多客户端都需要多个进程来合作完成任务。比如说第三方sdk容器进程或者是后台服务进程。Windows上的进程间通信方式比较多,常用的就是共享内存。
通用的做法是,创建一块共享内存,一个进程写,一个进程读,这是最简单的场景。主进程写入共享内存,然后用信号量或者时间对象等核心对象通知辅助进程读取数据就可以了。另一个复杂的场景就是,双方都要进行读写,这个时候策略管控就更为严格。
现在定一个目标需求: 我们需要一个RPC功能的组件,就像在本进程调用函数一样,传入函数名和参数,函数处理完之后返回。
为了避免封包结包的麻烦,同一进程可以在多线程先进行写操作,但是需要保证同时只有一个写入,而且对方没有处理完数据,写入操作不能返回。这样保证了双方进程一次只进行一次交互,省去了很多麻烦。
技术方案:
1.同进程写入需要锁,保证同时只有一个线程在写入共享内存
2.写完之后通知对方进程读取数据,当前线程阻塞等待,直到对方进程处理完毕后发出信号。
统计需要的资源:
这样进程双方为了获得读取数据的信号,各需要一个信号量。为了获知对方处理完毕双方还需要一个信号。所以总共就需要4个信号量。为了保证同进程同时只有一个写入操作,还需要一把锁mutex。
为了等待信号量读取数据,双方进程都需要一个单独的读进程用于等待处理操作。
所以统计一下,我们需要的资源,一个共享内存,4个信号量,一个mutex,一个读线程。