الاسم
- Provided by: manpages-ar-dev (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
مكتبة مسالك POSIX (libpthread، -lpthread)
#include <pthread.h>
int pthread_mutexattr_getrobust(const pthread_mutexattr_t *attr,
int *robustness);
int pthread_mutexattr_setrobust(pthread_mutexattr_t *attr,
int robustness);
pthread_mutexattr_getrobust()، pthread_mutexattr_setrobust():
_POSIX_C_SOURCE >= 200809L
تضع الدالة pthread_mutexattr_getrobust() قيمة سمة المتانة لكائن سمات القفل المتبادل المشار إليه بـ attr في *robustness. وتضبط الدالة pthread_mutexattr_setrobust() قيمة سمة المتانة لكائن سمات القفل المتبادل المشار إليه بـ attr إلى القيمة المحددة في *robustness.
تحدد سمة المتانة سلوك القفل المتبادل عندما يموت الخيط المالك دون فتح القفل المتبادل. القيم التالية صالحة لـ robustness:
لاحظ أن معامل attr لـ pthread_mutexattr_getrobust() و pthread_mutexattr_setrobust() يجب أن يشير إلى كائن سمات قفل متبادل تمت تهيئته بواسطة pthread_mutexattr_init(3)، وإلا كان السلوك غير محدد.
تُعيد هذه الدوال 0 عند النجاح. وتُعيد رقم خطأ موجب عند حدوث خطأ.
في تطبيق glibc، تعيد pthread_mutexattr_getrobust() دائمًا صفرًا.
في تطبيق Linux، عند استخدام أقفال متبادلة متينة مشتركة بين العمليات، يتلقى الخيط المنتظر أيضًا إشعار EOWNERDEAD إذا قام مالك قفل متبادل متين بتنفيذ execve(2) دون فتح القفل المتبادل أولاً. لا يحدد POSIX.1 هذه التفاصيل، ولكن يحدث نفس السلوك أيضًا في بعض التطبيقات الأخرى على الأقل.
POSIX.1-2008.
glibc 2.12. POSIX.1-2008.
قبل إضافة pthread_mutexattr_getrobust() و pthread_mutexattr_setrobust() إلى POSIX، عرّفت glibc الدوال غير القياسية المكافئة التالية إذا عُرفت _GNU_SOURCE:
[[deprecated]]
int pthread_mutexattr_getrobust_np(const pthread_mutexattr_t *attr,
int *robustness);
[[deprecated]]
int pthread_mutexattr_setrobust_np(const pthread_mutexattr_t *attr,
int robustness);
بالمقابل، عُرفت أيضًا الثوابت PTHREAD_MUTEX_STALLED_NP و PTHREAD_MUTEX_ROBUST_NP.
واجهات برمجة التطبيقات الخاصة بـ GNU هذه، التي ظهرت لأول مرة في glibc 2.4، أصبحت الآن مهملة ولا ينبغي استخدامها في البرامج الجديدة؛ منذ glibc 2.34، وُسِمت واجهات برمجة التطبيقات هذه بأنها مهملة.
البرنامج أدناه يوضح استخدام سمة المتانة لكائن سمات المزامنة. في هذا البرنامج، يموت خيط يحمل المزامنة مبكراً دون فتح المزامنة. يحصل الخيط الرئيسي لاحقاً على المزامنة بنجاح ويحصل على الخطأ EOWNERDEAD، وبعد ذلك يجعل المزامنة متسقة.
جلسة الصدفة التالية تظهر ما نراه عند تشغيل هذا البرنامج:
$ ./a.out; [original owner] Setting lock... [original owner] Locked. Now exiting without unlocking. [main] Attempting to lock the robust mutex. [main] pthread_mutex_lock() returned EOWNERDEAD [main] Now make the mutex consistent [main] Mutex is now consistent; unlocking
#include <err.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
static pthread_mutex_t mtx;
static void *
original_owner_thread(void *ptr)
{
printf("[original owner] Setting lock...\n");
pthread_mutex_lock(&mtx);
printf("[original owner] Locked. Now exiting without unlocking.\n");
pthread_exit(NULL);
}
int
main(void)
{
pthread_t thr;
pthread_mutexattr_t attr;
int s;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
pthread_mutex_init(&mtx, &attr);
pthread_create(&thr, NULL, original_owner_thread, NULL);
sleep(2);
/* "original_owner_thread" should have exited by now. */
printf("[main] Attempting to lock the robust mutex.\n");
s = pthread_mutex_lock(&mtx);
if (s == EOWNERDEAD) {
printf("[main] pthread_mutex_lock() returned EOWNERDEAD\n");
printf("[main] Now make the mutex consistent\n");
s = pthread_mutex_consistent(&mtx);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_mutex_consistent");
printf("[main] Mutex is now consistent; unlocking\n");
s = pthread_mutex_unlock(&mtx);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_mutex_unlock");
exit(EXIT_SUCCESS);
} else if (s == 0) {
printf("[main] pthread_mutex_lock() unexpectedly succeeded\n");
exit(EXIT_FAILURE);
} else {
printf("[main] pthread_mutex_lock() unexpectedly failed\n");
errc(EXIT_FAILURE, s, "pthread_mutex_lock");
}
}
get_robust_list(2), set_robust_list(2), pthread_mutex_consistent(3), pthread_mutex_init(3), pthread_mutex_lock(3), pthreads(7)
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.