我試圖使用shm.h庫共享兩個不同的使用一個共享內存塊。我寫了下面的例子,其中一個共享內存塊被創建並且足夠大以容納兩個整數。然後我附加兩個整數並創建兩個進程。第一個過程增加第一個整數。第二個過程然後打印出兩個整數的值。但是會發生什麼呢是兩個整數都會增加。通過sys/shm.h共享多個變量
我在做什麼錯?我剛開始學習如何使用shm庫。
這是代碼:
#include <sys/sem.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <stdio.h>
#include <unistd.h>
int main() {
// Declare variables
int shmID;
int *data1;
int *data2;
// Create a shared memory segment
if((shmID=shmget(IPC_PRIVATE, 2*sizeof(int), 0666 | IPC_CREAT))<0)
{
fprintf(stderr,"Problem initializing shared memory\n");
perror("main");
return -1;
}
if((data1=shmat(shmID,NULL,0))==(int *)-1)
{
fprintf(stderr,"Problem attaching memory 1\n");
perror("main");
return -1;
}
if((data2=shmat(shmID,NULL,0))==(int *)-1)
{
fprintf(stderr,"Problem attaching memory 2\n");
perror("main");
return -1;
}
printf("%p %p\n",data1,data2);
(*data1)=0;
(*data2)=0;
if(fork())
{ // Process 1 will be the incrementer
for(int i=0;i<100;i++)
{
(*data1)++;
printf("IN: %d\n",(*data1));
sleep(1);
}
printf("IN DONE\n");
}
else
{
while((*data1)<50)
{
printf("OUT: %d %d\n",(*data1),(*data2));
sleep(1);
}
printf("OUT DONE\n");
}
}
這是輸出:
0x7fcd42a97000 0x7fcd42a96000
IN: 1
OUT: 1 1
IN: 2
OUT: 2 2
IN: 3
OUT: 3 3
我在Gentoo Linux上運行此。
謝謝你,這工作。 – kkrizka