进程共享内存不共享(c,linux)
问题描述:
我需要为我的进程进行通信共享内存。我这样做:进程共享内存不共享(c,linux)
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);
在此之后,我使用叉进行更多的过程。我测试过,每个过程都写在matriz_resul
,但每个过程都有自己的区域。如果我打印该区域的内容,每个过程都会打印出不同的内容。内存不共享。我在互联网上找到的每个例子都是这样的。任何人都知道我做错了什么?
答
试试这个
segment_id = mmap(NULL,(sizeof(int) * linhas_mat1 * colunas_mat2),PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_SHARED,-1,0);
+0
关联'matriz_result =(int **)shmat(segment_id,NULL,0);'仍然使用mmap?并在这个共享内存中读写?这是来自纯C语言(而不是C++)? – 2013-05-06 11:15:24
我还没有确定病因,但你真的不应该使用旧版来SYSV IPC功能,除非你绝对必须的(例如,为了满足一些现有的API类似的要求XSHM扩展)。使用POSIX共享内存('shm_open')或者简单的'mmap'和'MAP_ANONYMOUS'。 – 2013-05-06 01:51:39