.\" -*- coding: UTF-8 -*- '\" t .\" 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_attr_init 3 "21 سبتمبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم pthread_attr_init, pthread_attr_destroy \- تهيئة وتدمير كائن سمات الخيط .SH المكتبة مكتبة مسالك POSIX (\fIlibpthread\fP،\ \fI\-lpthread\fP) .SH موجز .nf \fB#include \fP .P \fBint pthread_attr_init(pthread_attr_t *\fP\fIattr\fP\fB);\fP \fBint pthread_attr_destroy(pthread_attr_t *\fP\fIattr\fP\fB);\fP .fi .SH الوصف الدالة \fBpthread_attr_init\fP() تهيئ كائن سمات الخيط المشار إليه بواسطة \fIattr\fP بقيم سمات مبدئية. بعد هذه الاستدعاء، يمكن تعيين سمات فردية للكائن باستخدام دوال ذات صلة متنوعة (مدرجة تحت انظر أيضًا)، ثم يمكن استخدام الكائن في استدعاء واحد أو أكثر من \fBpthread_create\fP(3) التي تنشئ خيوطًا. .P استدعاء \fBpthread_attr_init\fP() على كائن سمات خيط سبق تهيئته يؤدي إلى سلوك غير محدد. .P عندما لا يعود كائن سمات الخيط مطلوبًا، يجب تدميره باستخدام الدالة \fBpthread_attr_destroy\fP(). تدمير كائن سمات الخيط لا يؤثر على الخيوط التي أُنشئت باستخدام ذلك الكائن. .P بمجرد تدمير كائن سمات الخيط، يمكن إعادة تهيئته باستخدام \fBpthread_attr_init\fP(). أي استخدام آخر لكائن سمات خيط مدمر يؤدي إلى نتائج غير محددة. .SH "قيمة الإرجاع" عند النجاح، تُعيد هذه الدوال القيمة 0؛ وعند الخطأ، تُعيد رقم خطأ غير صفري. .SH الأخطاء يُوثق POSIX.1 خطأ \fBENOMEM\fP لـ \fBpthread_attr_init\fP()؛ على لينكس تنجح هذه الدوال دائمًا (لكن التطبيقات المحمولة والمقاومة للمستقبل يجب مع ذلك معالجة إرجاع خطأ محتمل). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBpthread_attr_init\fP(), \fBpthread_attr_destroy\fP() T} سلامة الخيوط MT\-Safe .TE .SH المعايير POSIX.1\-2008. .SH التاريخ POSIX.1\-2001. .SH ملاحظات يجب معاملة النوع \fIpthread_attr_t\fP على أنه معتم: أي وصول إلى الكائن بخلاف دوال pthreads غير محمول وينتج نتائج غير محددة. .SH أمثلة البرنامج أدناه يستخدم اختياريًا \fBpthread_attr_init\fP() ودوال ذات صلة متنوعة لتهيئة كائن سمات خيط يُستخدم لإنشاء خيط واحد. بمجرد الإنشاء، يستخدم الخيط الدالة \fBpthread_getattr_np\fP(3) (إضافة GNU غير قياسية) لاسترداد سمات الخيط، ثم يعرض تلك السمات. .P إذا شُغّل البرنامج بدون وسيط سطر أوامر، فإنه يمرر NULL كوسيط \fIattr\fP لـ \fBpthread_create\fP(3)، بحيث يُنشأ الخيط بسمات مبدئية. بتشغيل البرنامج على Linux/x86\-32 مع تطبيق خيوط NPTL، نرى ما يلي: .P .in +4n .EX .\" Results from glibc 2.8, SUSE 11.0; Oct 2008 $\fB ulimit \-s\fP # No stack limit ==> default stack size is 2 MB unlimited $\fB ./a.out\fP Thread attributes: Detach state = PTHREAD_CREATE_JOINABLE Scope = PTHREAD_SCOPE_SYSTEM Inherit scheduler = PTHREAD_INHERIT_SCHED Scheduling policy = SCHED_OTHER Scheduling priority = 0 Guard size = 4096 bytes Stack address = 0x40196000 Stack size = 0x201000 bytes .EE .in .P عندما نقدم حجم المكدس كوسيط سطر أوامر، يهيئ البرنامج كائن سمات خيط، ويضبط سمات متنوعة في ذلك الكائن، ويمرر مؤشرًا إلى الكائن في استدعاء \fBpthread_create\fP(3). بتشغيل البرنامج على Linux/x86\-32 مع تطبيق خيوط NPTL، نرى ما يلي: .P .in +4n .EX .\" Results from glibc 2.8, SUSE 11.0; Oct 2008 $\fB ./a.out 0x3000000\fP posix_memalign() allocated at 0x40197000 Thread attributes: Detach state = PTHREAD_CREATE_DETACHED Scope = PTHREAD_SCOPE_SYSTEM Inherit scheduler = PTHREAD_EXPLICIT_SCHED Scheduling policy = SCHED_OTHER Scheduling priority = 0 Guard size = 0 bytes Stack address = 0x40197000 Stack size = 0x3000000 bytes .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (pthread_attr_init.c) \& .EX #define _GNU_SOURCE /* To get pthread_getattr_np() declaration */ #include #include #include #include #include #include \& static void display_pthread_attr(pthread_attr_t *attr, char *prefix) { int s, i; size_t v; void *stkaddr; struct sched_param sp; \& s = pthread_attr_getdetachstate(attr, &i); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getdetachstate"); printf("%sDetach state = %s\[rs]n", prefix, (i == PTHREAD_CREATE_DETACHED) ? "PTHREAD_CREATE_DETACHED" : (i == PTHREAD_CREATE_JOINABLE) ? "PTHREAD_CREATE_JOINABLE" : "???"); \& s = pthread_attr_getscope(attr, &i); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getscope"); printf("%sScope = %s\[rs]n", prefix, (i == PTHREAD_SCOPE_SYSTEM) ? "PTHREAD_SCOPE_SYSTEM" : (i == PTHREAD_SCOPE_PROCESS) ? "PTHREAD_SCOPE_PROCESS" : "???"); \& s = pthread_attr_getinheritsched(attr, &i); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getinheritsched"); printf("%sInherit scheduler = %s\[rs]n", prefix, (i == PTHREAD_INHERIT_SCHED) ? "PTHREAD_INHERIT_SCHED" : (i == PTHREAD_EXPLICIT_SCHED) ? "PTHREAD_EXPLICIT_SCHED" : "???"); \& s = pthread_attr_getschedpolicy(attr, &i); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getschedpolicy"); printf("%sScheduling policy = %s\[rs]n", prefix, (i == SCHED_OTHER) ? "SCHED_OTHER" : (i == SCHED_FIFO) ? "SCHED_FIFO" : (i == SCHED_RR) ? "SCHED_RR" : "???"); \& s = pthread_attr_getschedparam(attr, &sp); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getschedparam"); printf("%sScheduling priority = %d\[rs]n", prefix, sp.sched_priority); \& s = pthread_attr_getguardsize(attr, &v); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getguardsize"); printf("%sGuard size = %zu bytes\[rs]n", prefix, v); \& s = pthread_attr_getstack(attr, &stkaddr, &v); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_getstack"); printf("%sStack address = %p\[rs]n", prefix, stkaddr); printf("%sStack size = %#zx bytes\[rs]n", prefix, v); } \& static void * thread_start(void *arg) { int s; pthread_attr_t gattr; \& /* pthread_getattr_np() is a non\-standard GNU extension that retrieves the attributes of the thread specified in its first argument. */ \& s = pthread_getattr_np(pthread_self(), &gattr); if (s != 0) errc(EXIT_FAILURE, s, "pthread_getattr_np"); \& printf("Thread attributes:\[rs]n"); display_pthread_attr(&gattr, "\[rs]t"); \& exit(EXIT_SUCCESS); /* Terminate all threads */ } \& int main(int argc, char *argv[]) { pthread_t thr; pthread_attr_t attr; pthread_attr_t *attrp; /* NULL or &attr */ int s; \& attrp = NULL; \& /* If a command\-line argument was supplied, use it to set the stack\-size attribute and set a few other thread attributes, and set attrp pointing to thread attributes object. */ \& if (argc > 1) { size_t stack_size; void *sp; \& attrp = &attr; \& s = pthread_attr_init(&attr); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_init"); \& s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_setdetachstate"); \& s = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_setinheritsched"); \& stack_size = strtoul(argv[1], NULL, 0); \& s = posix_memalign(&sp, sysconf(_SC_PAGESIZE), stack_size); if (s != 0) errc(EXIT_FAILURE, s, "posix_memalign"); \& printf("posix_memalign() allocated at %p\[rs]n", sp); \& s = pthread_attr_setstack(&attr, sp, stack_size); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_setstack"); } \& s = pthread_create(&thr, attrp, &thread_start, NULL); if (s != 0) errc(EXIT_FAILURE, s, "pthread_create"); \& if (attrp != NULL) { s = pthread_attr_destroy(attrp); if (s != 0) errc(EXIT_FAILURE, s, "pthread_attr_destroy"); } \& pause(); /* Terminates when other thread calls exit() */ } .EE .\" SRC END .SH "انظر أيضًا" .ad l .nh \fBpthread_attr_setaffinity_np\fP(3), \fBpthread_attr_setdetachstate\fP(3), \fBpthread_attr_setguardsize\fP(3), \fBpthread_attr_setinheritsched\fP(3), \fBpthread_attr_setschedparam\fP(3), \fBpthread_attr_setschedpolicy\fP(3), \fBpthread_attr_setscope\fP(3), \fBpthread_attr_setsigmask_np\fP(3), \fBpthread_attr_setstack\fP(3), \fBpthread_attr_setstackaddr\fP(3), \fBpthread_attr_setstacksize\fP(3), \fBpthread_create\fP(3), \fBpthread_getattr_np\fP(3), \fBpthread_setattr_default_np\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 .