2014-05-22 83 views
0

我有奇怪的問題,需要一些幫助, 我試圖使用rfork()來產生一些子進程, 和使用mmap來映射共享內存, 但似乎他們沒有使用相同的內存空間,但有自己的, 我不知道原因是什麼,第二個問題是, 爲什麼int tt在tt ++, 之後變成4,但不是1?爲什麼我在c中的mmap無法正常工作?

感謝您的幫助!

這是我的代碼:

#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/mman.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <semaphore.h> 

int *tt; 

int main() 
{ 
    tt = (int *)mmap (NULL, sizeof(int), O_RDONLY | O_RDWR, MAP_SHARED | MAP_ANONYMOUS, -1, 0); 
    tt = 0; 
    sem_t mutex; 
    sem_init(&mutex,1,1); 
    pid_t proc[2]; 
    int i, me = 0; 
    for (i = 0; i < 2; i ++) { 
     if ((proc[i] = rfork(RFPROC)) == 0) { 
      me = i; 
      sem_wait(&mutex); 
      printf("total: %d\n", tt); 
      tt++; 
      printf("total: %d\n", tt); 
      sem_post(&mutex); 
      break; 
     } 
    } 
    return 0; 
} 

這是我的輸出:

total: 0 
total: 4 
total: 0 
total: 4 
+0

既然你的'互斥'是一個局部變量,而不是共享內存塊,它實際上不會同步進程... –

回答

1

如果您想通過tt = mmap(...);改變你所創建的共享內存,你必須使用*tt

*tt = 0; 

printf("total: %d\n", *tt); 
(*tt)++; 
+0

非常感謝你,我愛你><「 – user3620613

相關問題