.\" -*- coding: UTF-8 -*- .\" Copyright 2017, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH pthread_spin_init 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم pthread_spin_init, pthread_spin_destroy \- تهيئة أو تدمير قفل دوراني .SH المكتبة مكتبة مسالك POSIX (\fIlibpthread\fP،\ \fI\-lpthread\fP) .SH موجز .nf \fB#include \fP .P \fBint pthread_spin_init(pthread_spinlock_t *\fP\fIlock\fP\fB, int \fP\fIpshared\fP\fB);\fP \fBint pthread_spin_destroy(pthread_spinlock_t *\fP\fIlock\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBpthread_spin_init\fP()، \fBpthread_spin_destroy\fP(): .nf _POSIX_C_SOURCE >= 200112L .fi .SH الوصف \fIملاحظة عامة\fP: ينبغي لمعظم البرامج استخدام كواتح الاستبعاد المتبادل بدلاً من الأقفال الدورانية. الأقفال الدورانية مفيدة بشكل رئيسي بالاقتران مع سياسات جدولة الوقت الحقيقي. انظر الملاحظات. .P تخصص دالة \fBpthread_spin_init\fP() أي موارد مطلوبة لاستخدام القفل الدوراني المشار إليه بواسطة \fIlock\fP وتهيئ القفل ليكون في حالة غير مقفلة. يجب أن تأخذ وسيطة \fIpshared\fP إحدى القيم التالية: .TP \fBPTHREAD_PROCESS_PRIVATE\fP يُشغَّل القفل الدوراني فقط بواسطة خيوط في نفس عملية الخيط الذي يستدعي \fBpthread_spin_init\fP(). (يؤدي محاولة مشاركة القفل الدوراني بين العمليات إلى سلوك غير محدد.) .TP \fBPTHREAD_PROCESS_SHARED\fP يمكن تشغيل القفل الدوراني بواسطة أي خيط في أي عملية لديها وصول إلى الذاكرة المحتوية على القفل (أي، قد يكون القفل في كائن ذاكرة مشتركة يُشارك بين عمليات متعددة). .P يؤدي استدعاء \fBpthread_spin_init\fP() على قفل دوراني تمت تهيئته بالفعل إلى سلوك غير محدد. .P تدمر دالة \fBpthread_spin_destroy\fP() قفلاً دورانيًا تمت تهيئته سابقًا، محررة أي موارد خُصصت لذلك القفل. يؤدي تدمير قفل دوراني لم تتم تهيئته سابقًا أو تدمير قفل دوراني بينما يحمل خيط آخر القفل إلى سلوك غير محدد. .P بمجرد تدمير قفل دوراني، يؤدي تنفيذ أي عملية على القفل غير إعادة تهيئته مرة أخرى باستخدام \fBpthread_spin_init\fP() إلى سلوك غير محدد. .P نتيجة تنفيذ عمليات مثل \fBpthread_spin_lock\fP(3) و\fBpthread_spin_unlock\fP(3) و\fBpthread_spin_destroy\fP() على \fIنسخ\fP من الكائن المشار إليه بواسطة \fIlock\fP غير محددة. .SH "قيمة الإرجاع" عند النجاح، تُرجع هذه الدوال صفرًا. عند الفشل، تُرجع رقم خطأ. في حال فشل \fBpthread_spin_init\fP()، لا تتم تهيئة القفل. .SH الأخطاء .\" These errors don't occur on the glibc implementation قد تفشل \fBpthread_spin_init\fP() مع الأخطاء التالية: .TP \fBEAGAIN\fP النظام لديه موارد غير كافية لتهيئة قفل دوراني جديد. .TP \fBENOMEM\fP ذاكرة غير كافية لتهيئة القفل الدوراني. .SH المعايير POSIX.1\-2008. .SH التاريخ glibc 2.2. POSIX.1\-2001. .P دعم الأقفال الدورانية المشتركة بين العمليات هو خيار POSIX. هذا الخيار مدعوم في تنفيذ glibc. .SH ملاحظات ينبغي استخدام الأقفال الدورانية بالاقتران مع سياسات جدولة الوقت الحقيقي (\fBSCHED_FIFO\fP، أو ربما \fBSCHED_RR\fP). استخدام الأقفال الدورانية مع سياسات جدولة غير حتمية مثل \fBSCHED_OTHER\fP يشير غالبًا إلى خطأ في التصميم. المشكلة هي أنه إذا جُدول خيط يعمل تحت هذه السياسة خارج وحدة المعالجة المركزية بينما يحمل قفلاً دورانيًا، فإن خيوطًا أخرى ستضيع وقتًا في الدوران على القفل حتى يُعاد جدولة حامل القفل مرة أخرى ويُحرر القفل. .P إذا أنشأت الخيوط حالة طريق مسدود أثناء استخدام الأقفال الدورانية، فإن تلك الخيوط ستدور إلى الأبد مستهلكة وقت وحدة المعالجة المركزية. .P .\" FIXME . When PTHREAD_MUTEX_ADAPTIVE_NP is one day document .\" make reference to it here الأقفال الدورانية في مساحة المستخدم \fIليست\fP قابلة للتطبيق كحل إقفال عام. هي، بحكم تعريفها، عرضة لانعكاس الأولوية وأوقات دوران غير محدودة. يجب على المبرمج الذي يستخدم الأقفال الدورانية أن يكون حريصًا بشكل استثنائي ليس فقط في الكود، ولكن أيضًا من حيث تكوين النظام ووضع الخيوط وتعيين الأولويات. .SH "انظر أيضًا" .ad l .nh \fBpthread_mutex_init\fP(3)، \fBpthread_mutex_lock\fP(3)، \fBpthread_spin_lock\fP(3)، \fBpthread_spin_unlock\fP(3)، \fBpthreads\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .