在C中写入共享内存缓冲区时遇到问题

在C中写入共享内存缓冲区时遇到问题,c,memory,shared,C,Memory,Shared,假设我有一个缓冲区: int * buffer; 该缓冲区与多个进程共享(共享内存) 如果我想从缓冲区读/写,我该怎么做 我问这个问题是因为我发现了很多信息和各种不同的方法来解决这个问题,但答案缺乏条理,变得非常混乱和难以理解 下面是我用来创建共享内存段的函数: void * create_shared_memory(char *name, int size) { int *ptr; int ret; int fd = shm_open (name, O_RDWR

假设我有一个缓冲区:

int * buffer;
该缓冲区与多个进程共享(共享内存)

如果我想从缓冲区读/写,我该怎么做

我问这个问题是因为我发现了很多信息和各种不同的方法来解决这个问题,但答案缺乏条理,变得非常混乱和难以理解

下面是我用来创建共享内存段的函数:

void * create_shared_memory(char *name, int size) {

    int *ptr;
    int ret;

    int fd = shm_open (name, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);

    if (fd == -1) { 
        perror ("shm_open error!");
        exit (1);
    }

    ret = ftruncate (fd, sizeof (size));

    if (ret == -1) {
         perror ("ftruncate error!");
         exit (2);
    }

    ptr = mmap(0, sizeof (size), PROT_READ | PROT_WRITE,  MAP_SHARED, fd, 0);

    if (ptr == MAP_FAILED) {
        perror ("shm-mmap error!");
        exit (3);
    }

return ptr;

}

创建并映射共享内存段,从而获得指向它的指针后,您可以通过该指针对其进行读取或写入。就语法和机制而言,这与任何其他内存都是一样的。您可以按照自己喜欢的任何方式包装函数,但并不一定需要这样做


然而,正如EOF所观察到的,共享内存语义比非共享内存语义复杂得多。您需要在共享内存访问周围使用适当的同步辅助工具,以确保线程和/或进程正常协作,否则结果将不确定。

如何共享内存?您使用的是
pthread
、OpenMP还是其他什么?还是说内存需要跨代码共享?@wolfPack88我已经编辑过了!如果你都从共享内存中读写,你需要同步,锁,原子,你有什么。那么你有“所有这些”,你发布的一件事就是共享内存的分配?为什么?进程间共享内存的问题与线程间共享内存的问题是一样的,没有通用的答案。如何编码和同步读写取决于存储在内存中的内容以及需要如何访问它。试着问一下您试图实现的算法或数据结构,因为这个问题只讨论您已经在工作的部分。