C pthread的适当分散

C pthread的适当分散,c,pthreads,C,Pthreads,我试图让PTHREADS分别在每个核心上运行 我有我的密码: #include <stdio.h> #include <pthread.h> int LOOP; pthread_barrier_t barrier; void *thread(){ int i=0; int count =0; pthread_barrier_wait(&barrier); for (; i<LOOP; i++) count

我试图让PTHREADS分别在每个核心上运行

我有我的密码:

#include <stdio.h>
#include <pthread.h>

int LOOP;

pthread_barrier_t barrier;

void *thread(){
    int i=0;
    int count =0;
    pthread_barrier_wait(&barrier);
    for (; i<LOOP; i++)
        count++;
    pthread_barrier_wait(&barrier);

    return NULL;
}

int main(int argc, char* argv[])
{
    int nthreads = atoi(argv[1]);
    int i;
    LOOP = atoi(argv[2]);
    pthread_t threads[nthreads];
    pthread_barrier_init(&barrier, NULL, nthreads);
    for (i=1; i < nthreads; i++)
        pthread_create(&(threads[i]), NULL, thread, NULL);

    thread();
    return 0;
}
但在分析时,我看到线程运行在同一个核心上

我正在使用Linux。是否有我忘记设置的环境设置


谢谢

Linux上的sched_setaffinity。请注意,这个问题是纯C而不是C++的。循环使用什么值?然后做一些比简单的整数增量更占用CPU的事情。您需要返回计算出的值,以便计算不会被优化。此语句:void*thread{不是posix线程函数的正确原型/声明:它应该是:void*thread void*arg{发布的代码在访问argv[]超出argv[0]之前无法检查argc。如果命令行没有预期参数,则代码将访问空指针,因此尝试从地址0读取,这是未定义的行为,可能/将导致seg故障事件