在C中创建访问共享内存

所以我有一个问题,我真的不知道如何去做。 我希望也许你可以让我知道如何处理它。

我需要在共享内存中分配N个缓冲区。 每个缓冲区应初始化为0.然后我必须分叉N / 2个子进程数。

然后每个孩子(i)将值(i)写入缓冲区(i),睡眠一秒钟。 然后读取当前缓冲区的值,如果值在平均时间内更改,则显示一条消息。 然后孩子移动i-position N / 2次。

So I can have N Buffers = 11. (must be prime) N/2 children = 5. So child 2 would: write into buffer 2, sleep, read from buffer 2. (now move 2 positions) write into buffer 4, sleep, read from buffer 4. (now move 2 positions) **remmeber we only have five buffers so we go around again***** write into buffer 1, sleep, read from buffer 1. (now move 2 positions) write into buffer 3, sleep, read from buffer 3. (now move 2 positions) write into buffer 5, sleep, read from buffer 5. ***we stop moving here. N/2 moves already performed. 

有什么想法应该怎么做?

  • 我可以创建一个N个整数数组吗? 由于所有孩子都会访问相同的元素,这是一个问题吗?

用于共享内存处理的经典System V IPCfunction包括:

  • shmget()
  • shmat()
  • shmdt()
  • shmctl()
  • ftok()

POSIX等价物是:

  • shm_open()
  • shm_unlink()

使用mmap()将打开的共享内存对象加载到进程地址空间中。

我可以创建一个N个整数数组吗? 由于所有孩子都会访问相同的元素,这是一个问题吗?

是的,我想是的。 如果您使用多个线程,请按以下方式声明:

 volatile int sharedChannel[N]; 

如果您正在使用单独的进程,并且正在使用函数为您提供共享内存缓冲区,那么您将需要更多类似的内容

 volatile int *sharedChannel;