pthread_spin_init(3)

الاسم
pthread_spin_init, pthread_spin_destroy - تهيئة أو تدمير قفل دوراني

المكتبة
مكتبة مسالك POSIX (libpthread، -lpthread)

موجز
#include <pthread.h>

int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

pthread_spin_init()، pthread_spin_destroy():
    _POSIX_C_SOURCE >= 200112L

الوصف
ملاحظة عامة: ينبغي لمعظم البرامج استخدام كواتح الاستبعاد المتبادل بدلاً من الأقفال الدورانية. الأقفال الدورانية مفيدة بشكل رئيسي بالاقتران مع سياسات جدولة الوقت الحقيقي. انظر الملاحظات.

تخصص دالة pthread_spin_init() أي موارد مطلوبة لاستخدام القفل الدوراني المشار إليه بواسطة lock وتهيئ القفل ليكون في حالة غير مقفلة. يجب أن تأخذ وسيطة pshared إحدى القيم التالية:

PTHREAD_PROCESS_PRIVATE
    يُشغَّل القفل الدوراني فقط بواسطة خيوط في نفس عملية الخيط الذي يستدعي pthread_spin_init(). (يؤدي محاولة مشاركة القفل الدوراني بين العمليات إلى سلوك غير محدد.)

PTHREAD_PROCESS_SHARED
    يمكن تشغيل القفل الدوراني بواسطة أي خيط في أي عملية لديها وصول إلى الذاكرة المحتوية على القفل (أي، قد يكون القفل في كائن ذاكرة مشتركة يُشارك بين عمليات متعددة).

يؤدي استدعاء pthread_spin_init() على قفل دوراني تمت تهيئته بالفعل إلى سلوك غير محدد.

تدمر دالة pthread_spin_destroy() قفلاً دورانيًا تمت تهيئته سابقًا، محررة أي موارد خُصصت لذلك القفل. يؤدي تدمير قفل دوراني لم تتم تهيئته سابقًا أو تدمير قفل دوراني بينما يحمل خيط آخر القفل إلى سلوك غير محدد.

بمجرد تدمير قفل دوراني، يؤدي تنفيذ أي عملية على القفل غير إعادة تهيئته مرة أخرى باستخدام pthread_spin_init() إلى سلوك غير محدد.

نتيجة تنفيذ عمليات مثل pthread_spin_lock(3) وpthread_spin_unlock(3) وpthread_spin_destroy() على نسخ من الكائن المشار إليه بواسطة lock غير محددة.

قيمة الإرجاع
عند النجاح، تُرجع هذه الدوال صفرًا. عند الفشل، تُرجع رقم خطأ. في حال فشل pthread_spin_init()، لا تتم تهيئة القفل.

الأخطاء
قد تفشل pthread_spin_init() مع الأخطاء التالية:

EAGAIN
    النظام لديه موارد غير كافية لتهيئة قفل دوراني جديد.

ENOMEM
    ذاكرة غير كافية لتهيئة القفل الدوراني.

المعايير
POSIX.1-2008.

التاريخ
glibc 2.2. POSIX.1-2001.

دعم الأقفال الدورانية المشتركة بين العمليات هو خيار POSIX. هذا الخيار مدعوم في تنفيذ glibc.

ملاحظات
ينبغي استخدام الأقفال الدورانية بالاقتران مع سياسات جدولة الوقت الحقيقي (SCHED_FIFO، أو ربما SCHED_RR). استخدام الأقفال الدورانية مع سياسات جدولة غير حتمية مثل SCHED_OTHER يشير غالبًا إلى خطأ في التصميم. المشكلة هي أنه إذا جُدول خيط يعمل تحت هذه السياسة خارج وحدة المعالجة المركزية بينما يحمل قفلاً دورانيًا، فإن خيوطًا أخرى ستضيع وقتًا في الدوران على القفل حتى يُعاد جدولة حامل القفل مرة أخرى ويُحرر القفل.

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

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

انظر أيضًا
pthread_mutex_init(3)، pthread_mutex_lock(3)، pthread_spin_lock(3)، pthread_spin_unlock(3)، pthreads(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.