รหัสอยู่ใน C ฉันมีออบเจ็กต์สองประเภท (structs
) ที่มีความสัมพันธ์ระหว่างพ่อแม่และลูก ประเภทผู้ปกครองหนึ่งประเภทสามารถมีประเภทลูกได้ 0
หรือมากกว่านั้น เด็กไม่สามารถมีลูกของตัวเองได้ ฉันต้องการ O(1)
parent lookup (โดย uID
struct member) และ child lookup (รวมถึง uID
struct member) โดยไม่รู้ว่าใครคือ parent เมื่อฉันได้ตัวชี้ไปยังผู้ปกครองแล้ว ฉันต้องการที่จะสามารถทำซ้ำผ่านลูก ๆ ของมันได้ และเมื่อฉันมีตัวชี้ไปที่เด็ก ฉันต้องการที่จะรู้ว่าใครเป็นผู้ปกครอง ในระหว่างการทำงานของโปรแกรม เด็กหรือผู้ปกครองสามารถลบหรือแทรกได้ และเด็กสามารถเปลี่ยนผู้ปกครองได้ เมื่อพาเรนต์ถูกลบออก ลูกของพาเรนต์ก็ควรถูกลบออกด้วย และทั้งหมดนี้ควรทำในสภาพแวดล้อมแบบมัลติเธรด ดังนั้นฉันต้องการการอ่านแบบเธรดที่ปลอดภัย (ฉันจะใช้การล็อคแบบอ่านอย่างเดียวสำหรับการค้นหาคีย์ และการล็อคการอ่าน-เขียนสำหรับการแทรก/การลบ/การพาเรนต์ใหม่) คุณจะแนะนำโครงสร้างข้อมูลใด
เพิ่ม:
ขณะนี้ฉันกำลังพยายามใช้งานโดยใช้ไลบรารี uthash ( http://uthash.sourceforge.net/ ):
struct parent
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct child *first_child;
UT_hash_handle hh;
};
struct child
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct parent *parent;
UT_hash_handle hh;
};
struct parent *parents_list = NULL;
struct child *children_list = NULL;
ปัญหาคือเมื่อเด็กใหม่มาถึง มันก็กลายเป็นคนหางและไม่เกี่ยวข้องกับ "พี่น้อง" ของมัน