pthread_attr_setstack(3)

الاسم
pthread_attr_setstack, pthread_attr_getstack - ضبط/الحصول على سمات المكدس في كائن سمات الخيط

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

موجز
#include <pthread.h>

int pthread_attr_setstack(size_t stacksize;
                          pthread_attr_t *attr,
                          void stackaddr[stacksize],
                          size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *restrict attr,
                          void **restrict stackaddr,
                          size_t *restrict stacksize);

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

pthread_attr_getstack()، pthread_attr_setstack():
    _POSIX_C_SOURCE >= 200112L

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

ينبغي أن يشير stackaddr إلى أدنى بايت قابل للعنونة من مخزن مؤقت بحجم stacksize بايت تم تخصيصه بواسطة المستدعي. ينبغي أن تكون صفحات المخزن المؤقت المخصص قابلة للقراءة والكتابة معًا.

تُرجع الدالة pthread_attr_getstack() سمات عنوان المكدس وحجم المكدس لكائن سمات الخيط المشار إليه بواسطة attr في المخازن المؤقتة المشار إليها بواسطة stackaddr و stacksize، على التوالي.

قيمة الإرجاع
عند النجاح، تُعيد هذه الدوال القيمة 0؛ وعند الخطأ، تُعيد رقم خطأ غير صفري.

الأخطاء
يمكن أن تفشل pthread_attr_setstack() مع الخطأ التالي:

EINVAL
    stacksize أقل من PTHREAD_STACK_MIN (16384) بايت. على بعض الأنظمة، قد يحدث هذا الخطأ أيضًا إذا لم يكن stackaddr أو stackaddr + stacksize محاذيًا بشكل مناسب.

يُوثق POSIX.1 أيضًا خطأ EACCES إذا كانت منطقة المكدس الموصوفة بواسطة stackaddr و stacksize غير قابلة للقراءة والكتابة معًا بواسطة المستدعي.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
pthread_attr_setstack()، pthread_attr_getstack() | سلامة الخيوط | MT-Safe

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

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

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

عندما يستخدم تطبيق pthread_attr_setstack()، فإنه يتولى مسؤولية تخصيص المكدس. يُتجاهل أي قيمة لحجم الحارس تم ضبطها باستخدام pthread_attr_setguardsize(3). إذا اعتُبر ذلك ضروريًا، تقع على عاتق التطبيق مسؤولية تخصيص منطقة حارس (صفحة واحدة أو أكثر محمية ضد القراءة والكتابة) للتعامل مع احتمال تجاوز سعة المكدس.

ينبغي أن يكون العنوان المحدد في stackaddr محاذيًا بشكل مناسب: من أجل قابلية النقل الكاملة، قم بمحاذاته على حد صفحة (sysconf(_SC_PAGESIZE)). قد تكون posix_memalign(3) مفيدة للتخصيص. على الأرجح، ينبغي أيضًا أن يكون stacksize مضاعفًا لحجم صفحة النظام.

إذا استُخدم attr لإنشاء خيوط متعددة، فيجب على المستدعي تغيير سمة عنوان المكدس بين استدعاءات pthread_create(3)؛ وإلا، ستحاول الخيوط استخدام نفس منطقة الذاكرة لمكدساتها، وسينشأ فوضى.

أمثلة
انظر pthread_attr_init(3).

انظر أيضًا
mmap(2)، mprotect(2)، posix_memalign(3)، pthread_attr_init(3)، pthread_attr_setguardsize(3)، pthread_attr_setstackaddr(3)، pthread_attr_setstacksize(3)، pthread_create(3)، pthreads(7)

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

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

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