2013-05-06 155 views
0

我需要爲我的進程進行通信共享內存。我這樣做:進程共享內存不共享(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,但每個過程都有自己的區域。如果我打印該區域的內容,每個過程都會打印出不同的內容。內存不共享。我在互聯網上找到的每個例子都是這樣的。任何人都知道我做錯了什麼?

+0

我還沒有確定病因,但你真的不應該使用舊版來SYSV IPC功能,除非你絕對必須的(例如,爲了滿足一些現有的API類似的要求XSHM擴展)。使用POSIX共享內存('shm_open')或者簡單的'mmap'和'MAP_ANONYMOUS'。 – 2013-05-06 01:51:39

回答

0

試試這個

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