c - 有没有一种简单的方法将堆中的变量复制到共享内存中

标签 c multiprocessing shared-memory

我有几个结构体,它们在堆上分配了彼此的指针。我正在将多线程程序转换为多进程程序,因此我必须将堆上的这些结构放入共享内存中。到目前为止,我遇到的只是问题之上的问题。我的助教建议我使用 memcpy,但我不确定这是否有效。有没有办法将堆上的一组结构转换为共享内存?

我正在使用的结构:

 struct SharedData {
    int da;
    int         isopen;
    int     refcount;   // reference count:  number of threads using this object
    unsigned int    front;      // subscript of front of queue
    unsigned int    count;      // number of chars in queue
    unsigned int    bufsize;
    pthread_cond_t buffer_full;
    pthread_cond_t buffer_empty;
    pthread_mutex_t mtex;
    fifo_t* queue;
    sem_t       empty_count;

    sem_t       full_count;
    sem_t       use_queue;  // mutual exclusion
};

struct OverSharedData{
    struct SharedData ** rep;
    int rop;
};

我稍后对 OverSharedData、SharedData 结构和 fifo_t 队列以及多个 char 指针进行 malloc。它们都必须声明为共享内存吗?

最佳答案

malloc()从堆中请求内存的方式中,存在系统调用(例如shmget())来请求/创建共享内存段。如果您的请求成功,您可以在那里复制您想要的任何内容。 (是的,您可以使用memcpy。)但请记住要小心指针,保存在其共享内存中的对一个进程有效的指针不一定对使用该共享内存段的另一个进程有效。

所有进程都可以访问共享内存以进行读取和/或写入。如果多个进程正在读取/写入共享内存段,那么不用说,需要应用一些同步技术(例如信号量)。

请阅读共享内存。 Michael Kerrisk 的《Linux 编程接口(interface)》是一个很好的资料来源。

引用:

关于c - 有没有一种简单的方法将堆中的变量复制到共享内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145802/

相关文章:

python - 在C中,是否可以通过重新编译动态库来将新代码集成到正在运行的进程中?

python - 为什么在导入多处理时出现导入错误?

python - 如何通过 python 多处理填充数组?

c++ - 共享内存中的 STL 结构

c++ - 一个 VBO 可以绑定(bind)到多个 VAO 吗?

c++ - 我们可以使用单个指针实现双向链表吗?

python - 检查 Python multiprocessing.Connection 的实例?

python - 在 Python 中使用多处理模块时无法在进程之间互锁

Python - 多处理和共享内存

C 语言 以二进制方式访问内存