मैं यह जांचना चाहता हूं कि कतार तक पहुंचने से पहले कतार खाली है या नहीं। उस स्थिति में, क्या TAILQ_EMPTY() ऑपरेशन के लिए लॉक प्राप्त करना आवश्यक है। TAILQ_EMPTY() की परिभाषा के माध्यम से, ऐसा लगता है कि यह कतार पढ़ रहा है, इसलिए मुझे लगता है कि लॉक का उपयोग न करें। क्या मैं सही हूँ?

#परिभाषित करें TAILQ_EMPTY(head) ((head)->tqh_first == NULL)

0
anbu 9 अप्रैल 2020, 10:29

1 उत्तर

सबसे बढ़िया उत्तर

यदि आपके पास कतार तक पहुँचने के लिए केवल एक प्रक्रिया/धागा है, तो आपको ताले का उपयोग करने की आवश्यकता नहीं है क्योंकि आपके पास कतार में कोई समवर्ती पहुँच नहीं है।

हालांकि, यदि आपके पास समवर्ती तरीके से तत्वों को सम्मिलित करने और हटाने के लिए कतार तक पहुंचने वाली एकाधिक प्रक्रियाएं/धागे हैं, तो आपको ताले का उपयोग करके इन पहुंचों की रक्षा करने की आवश्यकता है।

उदाहरण के लिए, उस मामले की कल्पना करें जहां आप परीक्षण करते हैं कि क्या कतार खाली है, लेकिन कोई अन्य प्रक्रिया / धागा एक ही समय में कतार में एक तत्व सम्मिलित कर रहा है। यदि आप ऐसी स्थितियों को ध्यान में रखते हुए अपना कोड नहीं लिखते हैं तो आपका कोड गैर-निर्धारक रूप से व्यवहार करेगा।

sys/queue.h के कोड को पढ़ने से पता चलता है कि समवर्ती एक्सेस से कोई सुरक्षा नहीं है, इसलिए यदि आपके पास समवर्ती कोड है तो आपको उन्हें स्वयं संभालना होगा।

1
CRM 9 अप्रैल 2020, 09:05