Tôi đang cố gắng thiết kế/triển khai hàng đợi (tròn) (trong C) làm bộ nhớ dùng chung để có thể chia sẻ giữa nhiều luồng/quy trình.Thiết kế một Hàng đợi là bộ nhớ dùng chung
Cấu trúc hàng đợi là như sau:
typedef struct _q {
int q_size;
int q_front;
int q_rear;
int *q_data;
}queue;
nào hỗ trợ các chức năng sau:
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);
Theo kích thước hàng đợi được đề cập bởi người dùng, bộ nhớ cho q_data sẽ được phân bổ trong create_q().
Câu hỏi: Cách tạo bộ nhớ dùng chung cho hàng đợi này bằng cách sử dụng các chức năng hệ thống được cung cấp trong "sys/shm.h"? Bất kỳ đoạn mã/ví dụ nào để tạo/đính kèm/truy xuất/xóa bộ nhớ chia sẻ cho cấu trúc dữ liệu hàng đợi bằng cách sử dụng shmget(), shmat(), shmctl(), vv sẽ là một trợ giúp tuyệt vời.
Nếu bạn muốn giao tiếp các quy trình bằng cách sử dụng cơ chế giống hàng đợi, tốt hơn không nên sử dụng [hàng đợi tin nhắn] (http://www.it.uom.gr/teaching/c_marshall/node25.html)? Trên toàn bộ luồng từ cùng một quy trình, hàng đợi chuẩn được bảo vệ bởi một phần quan trọng sẽ đủ –
@dario_ramos hàng đợi thư sẽ là giải pháp lý tưởng cho vấn đề này .. nhưng tôi đang cố gắng đưa ra một ví dụ bằng cách sử dụng hàng đợi để tìm hiểu cách đính kèm một cấu trúc dữ liệu với bộ nhớ dùng chung. –
Trong trường hợp đó, khi tôi rối tung với Unix IPC, tôi đã theo [hướng dẫn của Beej về Unix IPC] (http://beej.us/guide/bgipc/). Nó thậm chí còn có một số câu chuyện cười! Bạn có thể truy cập trực tiếp vào [phần bộ nhớ chia sẻ] (http://beej.us/guide/bgipc/output/html/multipage/shm.html) –