هل يدعو الراغبين أي قفل داخليًا؟
سؤال
في سولاريس عندما أرفقت DBX بأحد مداخن الجري ، وجدت مكالمة إلى Fwrite تؤدي إلى __lll_lock_wait ()؟
في أي سيناريو سيحدث هذا؟ هل يحاول Fwrite داخليًا الحصول على قفل؟
المحلول
لا تقل المعايير التي نظرت إليها (C99 و Posix) شيئًا عن IO المقفل أو المقفل فيما يتعلق fwrite
.
على نظام Linux الخاص بي ، فإن ذكرهم ليس دقيقًا جدًا للقفل في man
صفحة:
For non-locking counterparts, see unlocked_stdio(3).
وبشكل فعال ، هناك أ fwrite_unlocked
وظيفة. الوظائف المقفلة القياسية في POSIX هي فقط getc_unlocked()
, getchar_unlocked()
, putc_unlocked()
, ، و putchar_unlocked()
.
تفسيري هو أنه من المحتمل أن يكون كل من IO المخزنة في مجموعة Man (3) مقفلة ، وأن لديك فقط عدد قليل جدًا من الواجهات الموحدة للقيام بـ IO غير المؤمّن.
إن قفل هذه الأشياء بين المواضيع أمر جيد حقًا لأنه بخلاف ذلك ، يمكن أن يكون لديك إخراج فوضوي تمامًا عندما تكتب عدة مؤشرات ترابط stderr
, ، على سبيل المثال