C++ 将三个单独的阵列放入共享内存
我有一个使用多处理和多线程的并行编程任务(实现一个并行解决方案,通过反对角线波传播找到两个字符串的长度)。我有三个单独的数组(实际上是C++ 将三个单独的阵列放入共享内存,c++,parallel-processing,multiprocessing,shared-memory,C++,Parallel Processing,Multiprocessing,Shared Memory,我有一个使用多处理和多线程的并行编程任务(实现一个并行解决方案,通过反对角线波传播找到两个字符串的长度)。我有三个单独的数组(实际上是int*s),表示“wave”的第一个、中间和最后一个反对角线,都存储在一个结构中,如下所示: typedef struct shared_buffer { int *back; int *middle; int *front; } shared_buff; 在main()中,我有以下声明: // MAX_ANTIDIAG_LENGTH
int*
s),表示“wave”的第一个、中间和最后一个反对角线,都存储在一个结构中,如下所示:
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之后就会中断。写入子进程中的数组并在父进程中打印所述数组不会返回预期值
因此,我的问题是:如何将这三个数组存储在共享内存中,以便整个进程系列可以方便地使用方括号访问所述数组
[]
?您共享的是int
s,而不是int*
s。每个进程都需要自己的共享\u buff
int id = shmget(ftok("/dev/null", 5), MAX_ANTIDIAG_LENGTH * 3, 0644 | IPC_CREAT);
int* shared = reinterpret_cast<int *>(shmat(id, nullptr, 0));
shared_buff shared_mem;
shared_mem.back = shared;
shared_mem.middle = shared + MAX_ANTIDIAG_LENGTH;
shared_mem.front = shared + (2 * MAX_ANTIDIAG_LENGTH);
intid=shmget(ftok(“/dev/null”,5),最大反诊断长度*30644;
int*shared=reinterpret_cast(shmat(id,nullptr,0));
共享\u buff共享\u mem;
shared_mem.back=共享;
shared_mem.middle=共享+最大长度;
shared_mem.front=shared+(2*最大长度);
您共享的是int
s,而不是int*
s。每个进程都需要自己的共享\u buff
int id = shmget(ftok("/dev/null", 5), MAX_ANTIDIAG_LENGTH * 3, 0644 | IPC_CREAT);
int* shared = reinterpret_cast<int *>(shmat(id, nullptr, 0));
shared_buff shared_mem;
shared_mem.back = shared;
shared_mem.middle = shared + MAX_ANTIDIAG_LENGTH;
shared_mem.front = shared + (2 * MAX_ANTIDIAG_LENGTH);
intid=shmget(ftok(“/dev/null”,5),最大反诊断长度*30644;
int*shared=reinterpret_cast(shmat(id,nullptr,0));
共享\u buff共享\u mem;
shared_mem.back=共享;
shared_mem.middle=共享+最大长度;
shared_mem.front=shared+(2*最大长度);
为什么使用typedef
?没有真正的原因,只是为了方便。什么样的方便?这不是C。只需执行struct name
并通过name
引用即可。不需要typedef
。我建议放弃任何C++源来介绍这种做法。我不知道,谢谢。至于弃源,我没有这回事;实际上,我一直在学习C++,就像我的帖子历史可能会建议的那样。为什么<代码> TyPuff?没有真正的理由,只是为了方便。什么样的方便?这不是C。只需执行struct name
并通过name
引用即可。不需要typedef
。我建议放弃任何C++源来介绍这种做法。我不知道,谢谢。至于弃源,我没有这回事;实际上,我一直在学习C++,就像我的帖子历史可能会建议的那样。假设我想交换周围的阵列,这是否适用于strightforwardstd::swap
?@SRSR333“交换周围的阵列”是什么意思?int
s或int*
s?谢谢。假设我想交换周围的阵列,这是否适用于strightforwardstd::swap
?@SRSR333“交换周围的阵列”是什么意思?int
s还是int*
s?