首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出默认的pthread亲和策略,然后是Linux Kernel 2.6.32

找出默认的pthread亲和策略,然后是Linux Kernel 2.6.32
EN

Stack Overflow用户
提问于 2014-01-24 20:25:10
回答 1查看 131关注 0票数 0

我正在尝试找出在HT系统中创建pthread时,科学Linux内核2.6.32遵循的默认亲和性策略是什么。有没有办法知道呢?在pthread创建过程中,没有调用亲和性,所以我猜亲和性留给了操作系统。

EN

回答 1

Stack Overflow用户

发布于 2014-01-31 10:16:29

我不确定这是否有帮助,但下面是一些代码,它们将使用pthread API获取和设置线程亲和性:

代码语言:javascript
复制
// nail down this thread so it will only run on a specific CPU
cpu_set_t tCPUSet;
CPU_ZERO(&tCPUSet);
CPU_SET(ENCODE_LEFT_THREAD_CPU, &tCPUSet);
nReturnCode = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &tCPUSet);
if (nReturnCode == -1)  {
    pLogFile->Write(LOG_ERR, "ERROR: encodeLeftThread(): pthread_setaffinity() failed, %s, exiting thread... ", strerror(errno));
    nThreadReturnValue = THREAD_CPU_AFFINITY_ERRORS;
    pthread_exit((void *)&nThreadReturnValue);
}

CPU_ZERO(&tCPUSet);
nReturnCode = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &tCPUSet);
if (nReturnCode == -1)  {
    pLogFile->Write(LOG_ERR, "ERROR: encodeLeftThread(): 2nd pthread_getaffinity() failed, %s, exiting thread... ", strerror(errno));
    nThreadReturnValue = THREAD_CPU_AFFINITY_ERRORS;
    pthread_exit((void *)&nThreadReturnValue);
}

sCPUs.clear();
sCPUs.append("    new left thread CPU affinity: ");
if (bInitLog)  {
    for (int i = 0; i < CPU_SETSIZE; i++)  {
        if (CPU_ISSET(i, &tCPUSet))  {
            sCPUs.append(" ");
            char c = '0' + i;
            sCPUs = sCPUs + c;
        }
    }
}
if (bInitLog) pLogFile->Write(LOG_DEBUG, "%s ", sCPUs.c_str());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21332679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档