linux下打印执行线程的cpu
时间: 2023-11-18 20:03:04 浏览: 134
在Linux下,可以使用`pthread_getaffinity_np`函数获取当前线程执行所在的CPU。具体用法如下:
```c
#include <pthread.h>
#include <sched.h>
void print_thread_cpu()
{
cpu_set_t cpuset;
pthread_t thread = pthread_self();
int rc = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
if (rc == 0) {
printf("Thread is running on CPU(s): ");
for (int i = 0; i < CPU_SETSIZE; i++) {
if (CPU_ISSET(i, &cpuset)) {
printf("%d ", i);
}
}
printf("\n");
}
}
```
在上面的代码中,`pthread_self()`函数用于获取当前线程的ID,然后调用`pthread_getaffinity_np`函数获取线程所在的CPU。如果`pthread_getaffinity_np`函数执行成功,就可以通过`CPU_ISSET`宏判断CPU集合中哪些CPU被分配给了当前线程,从而得到线程所在的CPU编号。
注意,`pthread_getaffinity_np`函数可能会返回`EINVAL`错误,这种情况下需要检查线程ID的有效性。另外,`CPU_ISSET`宏在`sched.h`头文件中定义。
阅读全文