C pthread的适当分散
我试图让PTHREADS分别在每个核心上运行 我有我的密码: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
#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故障事件