linux/list.h
की टिप्पणी में लिखा है कि:linux/list.h - सूची से वस्तुओं को सुरक्षित रूप से कैसे हटाएं?
list_del_entry
का उपयोग कर पर: नोट:list_empty
प्रवेश पर लौटने के बाद यह सच नहीं है, प्रविष्टि को एक अपरिभाषित स्थिति में है।list_del
के लिए: यह आंतरिक सूची में गड़बड़ी, जहां हम पिछला/अगले प्रविष्टियों पहले से ही पता के लिए ही है!
तो, मैं सुरक्षित रूप से एक वस्तु से जुड़े हुए सूची से हटाने और यह सुनिश्चित करें कि list_empty
कार्यात्मक है या लगता है कि अगले लिंक्ड सूची नोड विलोपन सही है होगा?
struct kool_list{
int to;
struct list_head list;
int from;
};
struct kool_list *tmp;
struct list_head *pos, *q;
struct kool_list mylist;
list_for_each_safe(pos, q, &mylist.list){
tmp= list_entry(pos, struct kool_list, list);
printf("freeing item to= %d from= %d\n", tmp->to, tmp->from);
list_del(pos);
free(tmp);
}
आप सूची दो संदर्भों से इस्तेमाल किया जा सकता है, तो एक ताला उपयोग करने के लिए की जरूरत है। नोटेशन '_safe()' केवल आगे की दिशा में सूची ट्रैवर्सल (रीडिंग) के लिए सुरक्षित प्रतीत होता है। कुछ 'आर्क' को लॉक-फ्री लिखा जा सकता है, लेकिन लिनक्स ने अभी तक ऐसा नहीं किया है। (यह ज्ञात हो सकता है, लेकिन मुझे लगता है कि यह उल्लेखनीय है)। –