我是否需要为shm_open锁或互斥锁

时间:2017-10-31 01:08:07

标签: c multiprocessing ipc shared-memory shared-file

我想进行多进程编程,我需要共享数据(读写器案例)。

我的想法是使用共享内存来跟踪读/写索引。 索引表示共享文件索引。 例如,如果写入索引= 2,则表示writer正在编写名为的共享文件 " temp_2.data&#34 ;.如果读取索引= 1,则表示读者正在读取名为" temp_1.data"的共享文件。

我的问题是:

  1. 我是否需要同步机制,例如:访问下面的rptr? 或shm_open本身承诺同步? 如果是,它是如何制作的 同步?

  2. 共享内存和共享文件的混合设计有意义吗?或者,如果 有更好的方法吗?

  3. 感谢〜

    #include <unistd.h>
    #include <sys/mman.h>
    ...
    
    
    #define MAX_LEN 10000
    struct region {        /* Defines "structure" of shared memory */
        int len;
        char buf[MAX_LEN];
    };
    struct region *rptr;
    int fd;
    
    
    /* Create shared memory object and set its size */
    
    
    fd = shm_open("/myregion", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
    if (fd == -1)
        /* Handle error */;
    
    
    if (ftruncate(fd, sizeof(struct region)) == -1)
        /* Handle error */;
    
    
    /* Map shared memory object */
    
    
    rptr = mmap(NULL, sizeof(struct region),
           PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (rptr == MAP_FAILED)
        /* Handle error */;
    
    
    /* Now we can refer to mapped region using fields of rptr;
       for example, rptr->len */
    ...
    

0 个答案:

没有答案