سؤال

في سولاريس عندما أرفقت 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, ، على سبيل المثال

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