【发布时间】: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) 或简单地使用mmap和MAP_ANONYMOUS。