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

时间:2014-04-18 00:54:38

标签: c multiprocessing shared-memory

我有几个结构,在堆上分配了另一个指针。我将多线程程序转换为多进程程序,因此我必须将堆上的结构转换为共享内存。到目前为止,除了问题之外我还遇到了问题。 MY TA建议我使用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;
};

我的malloc&#d; OverSharedData ,SharedData结构,fifo_t队列,以及稍后的多个char 指针。它们都必须被声明为共享内存吗?

1 个答案:

答案 0 :(得分:0)

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

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

请阅读共享内存。一个很好的来源是" Linux编程接口"作者:Michael Kerrisk

参考: