pthread 亲和性设置 绑定 CPU 详解 pthread

阅读: 评论:0

pthread 亲和性设置 绑定 CPU 详解 pthread

pthread 亲和性设置 绑定 CPU 详解 pthread

pthread 亲和性设置

pthread_attr_setaffinity_np

  • 函数原型:

    int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize,const cpu_set_t *cpuset);
    
    • attr:指向线程属性对象的指针。
    • cpusetsize:CPU 亲和性集合的大小(以字节为单位)。
    • cpuset:指向 CPU 亲和性集合的指针,其中包含要绑定线程的 CPU。
    • 返回值:成功返回 0,失败返回错误代码。
  • 用于设置线程的 CPU 亲和性(CPU Affinity)。

  • 它允许将线程绑定到特定的 CPU 核心或 CPU 集合上,以控制线程在哪些 CPU 上运行。

pthread_setaffinity_np

  • 函数原型:

    int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,const cpu_set_t *cpuset);
    
    • thread:要设置 CPU 亲和性的线程标识符。
    • cpusetsize:CPU 亲和性集合的大小(以字节为单位)。
    • cpuset:指向 CPU 亲和性集合的指针,其中包含要绑定线程的 CPU。
    • 返回值:成功返回 0,失败返回错误代码。
  • 用于设置线程的 CPU 亲和性(CPU Affinity)。

  • 它允许将线程绑定到特定的 CPU 核心或 CPU 集合上,以控制线程在哪些 CPU 上运行。

示例1

  • 本示例演示了如何在创建线程时限制其只能在 cpu1 上运行。

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <sched.h>void *thread_func(void *arg)
    {usleep(10000);// 获取当前线程的 CPU 亲和性cpu_set_t cpuset;CPU_ZERO(&cpuset);pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);// 打印当前线程绑定的 CPUfor (int i = 0; i < CPU_SETSIZE; i++) {if (CPU_ISSET(i, &cpuset)) {printf("thread is running on cpu %dn", i);}}return NULL;
    }int main() {pthread_t tid;pthread_attr_t attr;pthread_attr_init(&attr);// 创建线程并设置其只能在 cpu1 上运行cpu_set_t mask;CPU_ZERO(&mask);CPU_SET(1, &mask);pthread_attr_setaffinity_np(&attr, sizeof(mask), &mask);pthread_create(&tid, &attr, thread_func, NULL);pthread_attr_destroy(&attr);pthread_join(tid, NULL);return 0;
    }
    

示例2

  • 本示例演示了如何在创建线程后限制其只能在 cpu0 1 2 上运行。

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <sched.h>void *thread_func(void *arg)
    {usleep(10000);// 获取当前线程的 CPU 亲和性cpu_set_t cpuset;CPU_ZERO(&cpuset);pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);// 打印当前线程绑定的 CPUfor (int i = 0; i < CPU_SETSIZE; i++) {if (CPU_ISSET(i, &cpuset)) {printf("thread is running on cpu %dn", i);}}return NULL;
    }int main() {// 创建线程并设置其只能在 cpu0 1 2 上运行pthread_t tid;cpu_set_t mask;CPU_ZERO(&mask);CPU_SET(0, &mask);CPU_SET(1, &mask);CPU_SET(2, &mask);pthread_create(&tid, NULL, thread_func, NULL);pthread_setaffinity_np(tid, sizeof(mask), &mask);pthread_join(tid, NULL);return 0;
    }
    

推荐

  • 推荐使用 示例1 中的方式进行 cpu 亲和性的设置。

本文发布于:2024-01-27 18:22:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063509211869.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:亲和性   绑定   详解   pthread   CPU
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23