لماذا تم تصميم INET_NETOA لتكون وظيفة غير إعادة التشغيل؟

StackOverflow https://stackoverflow.com/questions/1705885

  •  19-09-2019
  •  | 
  •  

سؤال

اللقطة في شفرة المصدر في مكتبة GNU C، لقد وجدت INET_NTOA مع

static __thread char buffer[18]

سؤالي هو، نظرا لوجود الحاجة إلى استخدام reeentrant inet_ntoa، لماذا لا تستخدم مؤلف مكتبة جنو ج مالوك لتنفيذها؟

شكرًا.

هل كانت مفيدة؟

المحلول

والسبب في عدم استخدام كومة الكومة هو المطابقة مع المعايير (بوسيكس) والأنظمة الأخرى. الواجهة ليست فقط بحيث من المفترض أن تحرر العازلة التي تم إرجاعها. يفترض التخزين الثابت ..

ولكن بإعلانها كخيط محلي (مع __thread)، فإن اثنين من الخيوط لا تتعارض مع بعضها البعض إذا حدثت كلاهما يسمي الوظيفة. هذا هو حل Glibc من كسر الواجهة.

صحيح أن هذا ليس كذلك إعادة الدخول أو بما يتفق مع روح هذا الفصل الدراسي. إذا كان لديك وظيفة متكررة تدعوها، لا يمكنك الاعتماد على المخزن المؤقت هو نفسه بين المكالمات. ولكن يمكن استخدامها من قبل مؤشرات الترابط متعددة، والتي غالبا ما تكون جيدة بما فيه الكفاية.

تعديل: بالمناسبة، تذكرت للتو، هناك إصدار أحدث من هذه الوظيفة التي تستخدم المخزن المؤقت المتصل المتصل. يرى inet_ntop().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top