我需要使用多个进程在C中实现并发矩阵乘法。我理解,因为每个进程都有自己的私有地址空间,我将不得不使用某种形式的进程间通信(IPC)。我做了一些环顾四周,找不到许多没有使用线程的实现。我想知道是否有人知道最好的方法,使用共享内存,消息传递或管道?我不是要求解决方案,而是,如果有人知道,这些方法中的哪一种在矩阵乘法中会更有效。或者,如果有一个通用的标准方法来执行多个流程?
答案 0 :(得分:1)
共享内存将是解决此问题的良好解决方案。这些流程可以计算他们的解决方案并共享一个内存以将解决方案整合在一起。
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
是共享内存的C函数之一(您需要shmat()
,也可能需要shmdt()
和shmctl()
。
此外,您必须关心同步,以便进程不会相互操作计算。
我会使用信号量:参见Semaphores in C和Semaphore Wikipedia
答案 1 :(得分:1)
同时处理矩阵乘法的最有效方法是共享内存。这样,您不必通过管道/消息序列化矩阵,并且可以直接在共享内存空间上应用乘法。