zoukankan      html  css  js  c++  java
  • 绑定线程到特定CPU处理器

    参考这篇文章 

    http://blog.chinaunix.net/uid-27761170-id-5050258.html

    代码如下:

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <sched.h>
    
    void *myfun(void *arg)
    {
        cpu_set_t mask;
        cpu_set_t get;
        char buf[256];
        int i;
        int j;
        int num = sysconf(_SC_NPROCESSORS_CONF);
        printf("system has %d processor(s)
    ", num);
    
        for (i = 0; i < num; i++) {
            CPU_ZERO(&mask);
            CPU_SET(i, &mask);
            if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {
                fprintf(stderr, "set thread affinity failed
    ");
            }
            CPU_ZERO(&get);
            if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
                fprintf(stderr, "get thread affinity failed
    ");
            }
            for (j = 0; j < num; j++) {
                if (CPU_ISSET(j, &get)) {
                    printf("thread %d is running in processor %d
    ", (int)pthread_self(), j);
                }
            }
            j = 0;
            while (j++ < 100000000) {
                memset(buf, 0, sizeof(buf));
            }
        }
        pthread_exit(NULL);
    }
    
    int main(int argc, char *argv[])
    {
        pthread_t tid;
        if (pthread_create(&tid, NULL, (void *)myfun, NULL) != 0) {
            fprintf(stderr, "thread create failed
    ");
            return -1;
        }
        pthread_join(tid, NULL);
        return 0;
    }
    这段代码将使myfun线程在所有cpu中依次执行一段时间,在我的四核cpu上,执行结果为  :
           system has 4 processor(s)        
           thread 1095604544 is running in processor 0        
           thread 1095604544 is running in processor 1        
           thread 1095604544 is running in processor 2        
           thread 1095604544 is running in processor 3 
           在一些嵌入式设备中,运行的进程线程比较单一,如果指定进程线程运行于特定的cpu核,减少进程、线程的核间切换,有可能可以获得更高的性能。
     
  • 相关阅读:
    linux基础练习题(3)
    linux基础练习题(2)
    linux基础练习题(1)
    编辑器 vim
    Linux 命令总结
    Sublime Text 3 快捷键总结(拿走)
    Linux 主要目录速查表
    javaScript中的querySelector()与querySelectorAll()的区别
    javaScript定时器
    js基本类型和字符串的具体应用
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6263468.html
Copyright © 2011-2022 走看看