【问题标题】:process shared memory not sharing (c, linux)进程共享内存不共享(c,linux)
【发布时间】:2013-05-06 00:55:39
【问题描述】:

我需要使共享内存与我的进程通信。我正在这样做:

int **matriz_result;
int segment_id;
segment_id = shmget(IPC_PRIVATE, (sizeof(int) * linhas_mat1 * colunas_mat2) , S_IRUSR | S_IWUSR);
matriz_result = (int **) shmat(segment_id, NULL, 0);

在此之后,我使用 fork 来创建更多进程。我测试过,每个进程都写在matriz_resul,但每个进程都有自己的区域。如果我打印该区域的内容,每个进程都会打印不同的内容。内存不共享。我在互联网上找到的每个例子都是这样的。有谁知道我做错了什么?

【问题讨论】:

  • 我还不确定原因,但你真的不应该使用旧的 sysv ipc 函数,除非你绝对必须(例如,满足某些现有 API 的要求,如 XSHM 扩展) .使用 POSIX 共享内存 (shm_open) 或简单地使用 mmapMAP_ANONYMOUS

标签: c memory process shared


【解决方案1】:

试试这个

segment_id = mmap(NULL,(sizeof(int) * linhas_mat1 * colunas_mat2),PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_SHARED,-1,0 );

【讨论】:

  • 关联matriz_result = (int **) shmat(segment_id, NULL, 0);使用mmap还是一样吗?以及在这个共享内存中的读写?这是来自纯 C 语言(不是 C++)?
最近更新 更多