【发布时间】:2012-01-18 17:04:58
【问题描述】:
我正在尝试将(循环)队列(在 C 中)设计/实现为共享内存,以便它可以在多个线程/进程之间共享。
队列结构如下:
typedef struct _q {
int q_size;
int q_front;
int q_rear;
int *q_data;
}queue;
支持以下功能:
int empty_q(queue *q);
int display_q(queue *q);
int create_q(queue **q, int size);
int delete_q(queue **q);
int enqueue(queue *q, int data);
int dequeue(queue *q, int *data);
根据用户提到的队列大小,在create_q()中为q_data分配内存。
问题:如何使用“sys/shm.h”中提供的系统函数为该队列创建共享内存?任何使用 shmget()、shmat()、shmctl() 等为队列数据结构创建/附加/检索/删除共享内存的代码 sn-p/example 都会有很大帮助。
【问题讨论】:
-
如果你想使用类似队列的机制来通信进程,使用message queues不是更好吗?跨来自同一进程的线程,受临界区保护的标准队列就足够了
-
@dario_ramos 消息队列将是解决此问题的理想解决方案..但我试图举一个使用队列的示例来了解如何将数据结构与共享内存连接。
-
在那种情况下,当我搞砸了 Unix IPC 时,我关注了Beej's guide to Unix IPC。它甚至有一些笑话!可以直接去shared memory section
-
我添加了最后一条评论作为答案,因为我检查了该指南,它正是您所需要的
标签: c memory posix shared-memory