pthread_setaffinity_np(3)

الاسم
pthread_setaffinity_np, pthread_getaffinity_np - ضبط/الحصول على تقارب وحدة المعالجة المركزية لخيط

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

موجز
#define _GNU_SOURCE             /* انظر feature_test_macros(7) */
#include <pthread.h>

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
                           const cpu_set_t *cpuset);
int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,
                           cpu_set_t *cpuset);

الوصف
تضبط الدالة pthread_setaffinity_np() قناع تقارب وحدة المعالجة المركزية للخيط thread إلى مجموعة وحدة المعالجة المركزية المشار إليها بواسطة cpuset. إذا نجحت الاستدعاء، ولم يكن الخيط يعمل حاليًا على إحدى وحدات المعالجة المركزية في cpuset، فسيُهاجر إلى إحدى تلك الوحدات.

تُرجع الدالة pthread_getaffinity_np() قناع تقارب وحدة المعالجة المركزية للخيط thread في المخزن المؤقت المشار إليه بواسطة cpuset.

لمزيد من التفاصيل حول أقنعة تقارب المعالج (CPU affinity masks)، راجع sched_setaffinity(2). لوصف لمجموعة من الماكرو التي يمكن استخدامها لمعالجة وفحص مجموعات المعالجات، راجع CPU_SET(3).

الوسيطة cpusetsize هي طول (بالبايت) المخزن المؤقت المشار إليه بواسطة cpuset. عادةً، تُحدد هذه الوسيطة كـ sizeof(cpu_set_t). (قد تكون قيمة أخرى، إذا استُخدمت وحدات الماكرو الموصوفة في CPU_SET(3) للتخصيص الديناميكي لمجموعة وحدة المعالجة المركزية.)

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

الأخطاء

EFAULT
    عنوان الذاكرة المقدم غير صالح.

EINVAL
    (pthread_setaffinity_np()) لا يحتوي قناع البتات للتقارب mask على أي معالجات موجودة فعليًا حاليًا على النظام ومسموح بها للخيط وفقًا لأي قيود قد تُفرض بواسطة آلية "cpuset" الموصوفة في cpuset(7).

EINVAL
    (pthread_setaffinity_np()) حدد cpuset وحدة معالجة مركزية خارج المجموعة المدعومة من النواة. (يُعرف خيار تهيئة النواة CONFIG_NR_CPUS نطاق المجموعة المدعومة من نوع بيانات النواة المستخدم لتمثيل مجموعات وحدة المعالجة المركزية.)

EINVAL
    (pthread_getaffinity_np()) cpusetsize أصغر من حجم قناع التقارب المستخدم من النواة.

ESRCH
    تعذر العثور على أي خيط بالمعرف thread.

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

المعايير
جنو؛ ومن هنا جاءت اللاحقة "_np" (غير منقول) في الأسماء.

التاريخ
glibc 2.3.4.

في إصدار glibc 2.3.3 فقط، توفرت نسخ من هذه الدوال لم تكن تحتوي على معطى cpusetsize. بدلاً من ذلك، كان حجم مجموعة وحدة المعالجة المركزية المعطى لنداءات النظام الأساسية هو دائماً sizeof(cpu_set_t).

ملاحظات
بعد استدعاء pthread_setaffinity_np()، تكون مجموعة وحدات المعالجة المركزية التي سيعمل عليها الخيط فعليًا هي تقاطع المجموعة المحددة في الوسيطة cpuset ومجموعة وحدات المعالجة المركزية الموجودة فعليًا على النظام. قد يُقيد النظام أيضًا مجموعة وحدات المعالجة المركزية التي يعمل عليها الخيط إذا استُخدمت آلية "cpuset" الموصوفة في cpuset(7). تُفرض هذه القيود على المجموعة الفعلية لوحدات المعالجة المركزية التي سيعمل عليها الخيط بصمت من النواة.

تُنفذ هذه الدوال فوق استدعاءات النظام sched_setaffinity(2) و sched_getaffinity(2).

يرث خيط جديد مُنشأ بواسطة pthread_create(3) نسخة من قناع تقارب وحدة المعالجة المركزية لمنشئه.

أمثلة
في البرنامج التالي، يستخدم الخيط الرئيسي pthread_setaffinity_np() لضبط قناع تقارب وحدة المعالجة المركزية ليشمل وحدات المعالجة المركزية 0 إلى 7 (قد لا تكون جميعها متاحة على النظام)، ثم يستدعي pthread_getaffinity_np() للتحقق من قناع تقارب وحدة المعالجة المركزية الناتج للخيط.

    #define _GNU_SOURCE
    #include <err.h>
    #include <pthread.h>
    #include <sched.h>
    #include <stdio.h>
    #include <stdlib.h>

    int
    main(void)
    {
        int s;
        cpu_set_t cpuset;
        pthread_t thread;

        thread = pthread_self();

        /* Set affinity mask to include CPUs 0 to 7.  */

        CPU_ZERO(&cpuset);
        for (size_t j = 0; j < 8; j++)
            CPU_SET(j, &cpuset);

        s = pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_setaffinity_np");

        /* Check the actual affinity mask assigned to the thread.  */

        s = pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_getaffinity_np");

        printf("Set returned by pthread_getaffinity_np() contained:\n");
        for (size_t j = 0; j < CPU_SETSIZE; j++)
            if (CPU_ISSET(j, &cpuset))
                printf("    CPU %zu\n", j);

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
sched_setaffinity(2), CPU_SET(3), pthread_attr_setaffinity_np(3), pthread_self(3), sched_getcpu(3), cpuset(7), pthreads(7), sched(7)

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

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

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