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