【发布时间】:2021-01-03 13:55:42
【问题描述】:
我有一个使用多处理和多线程的并行编程任务(通过反对角波传播实现并行解决方案以找到两个字符串的LCS)。我有三个单独的数组(实际上是int*s)代表“波浪”的第一个、中间和最后一个对角线,都存储在一个结构中,如下所示:
typedef struct shared_buffer
{
int *back;
int *middle;
int *front;
} shared_buff;
在main(),我有以下声明:
// MAX_ANTIDIAG_LENGTH is a macro, defined as the *minimum* of the lengths of the two input strings
int id = shmget(ftok("/dev/null", 5), MAX_ANTIDIAG_LENGTH * 3, 0644 | IPC_CREAT);
shared_buff* shared_mem = (shared_buff *) shmat(id, nullptr, 0);
shared_mem->back = std::memcpy((int*)calloc(MAX_ANTIDIAG_LENGTH, sizeof(int)));
shared_mem->middle = std::memcpy((int*)calloc(MAX_ANTIDIAG_LENGTH, sizeof(int)));
shared_mem->front = std::memcpy((int*)calloc(MAX_ANTIDIAG_LENGTH, sizeof(int)));
然而,据我所知,显然共享内存不喜欢存储指针,这在fork()ing 之后中断。写入子进程中的数组,并在父进程中打印所述数组,不返回预期值。
因此,我的问题是:如何将这三个数组存储在共享内存中,以便整个进程家族可以轻松地使用方括号[] 访问所述数组?
【问题讨论】:
-
为什么是
typedef? -
没有真正的原因,只是为了方便。
-
什么样的方便?这不是 C。你可以做
struct name并通过name引用它。typedef的零需求。我建议放弃任何向您介绍这种做法的 C++ 源代码。 -
我不知道,谢谢。至于弃源,我没有这回事;事实上,正如我的帖子历史所暗示的那样,我一直在相当匆忙地学习 C++。
标签: c++ parallel-processing multiprocessing shared-memory