日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下线程绑定内核,多线程 – 无法将内核线程绑定到CPU

發布時間:2023/12/31 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下线程绑定内核,多线程 – 无法将内核线程绑定到CPU 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我編寫了這段代碼來將2個內核線程綁定到不同的CPU:

#include

#include

#include

#include

struct task_struct *task1;

struct task_struct *task2;

int cpu, data;

int thread_function_one(void *data)

{

int ret = 10;

printk(KERN_INFO "IN THREAD FUNCTION 1 \n");

while(!kthread_should_stop()){

cpu = get_cpu();

put_cpu();

printk("t1 cpu = %d\n",cpu);

msleep(5000);

}

printk(KERN_INFO "EXIT from thread function 1\n");

return ret;

}

int thread_function_two(void *data)

{

int ret = 10;

printk(KERN_INFO "IN THREAD FUNCTION 2 \n");

while(!kthread_should_stop()){

cpu = get_cpu();

put_cpu();

printk("t2 cpu = %d\n",cpu);

msleep(6000);

}

printk(KERN_INFO "EXIT from thread function 2\n");

return ret;

}

static int kernel_init(void)

{

printk(KERN_INFO "module_init\n");

cpu = get_cpu();

put_cpu();

printk("main thread cpu = %d \n",cpu);

task1 = kthread_create(&thread_function_one,(void *)&data,"one");

kthread_bind(task1, cpu);

wake_up_process(task1);

cpu = 5;

task2 = kthread_create(&thread_function_two,(void *)&data,"two");

kthread_bind(task2, cpu);

wake_up_process(task2);

return 0;

}

static void kernel_exit(void)

{

kthread_stop(task1);

kthread_stop(task2);

printk(KERN_INFO "module_exit\n");

}

module_init(kernel_init);

module_exit(kernel_exit);

MODULE_AUTHOR("K_K");

MODULE_LICENSE("GPL");

但是當我在thread_function_one和thread_function_two中打印cpu id時,兩者都打印與主線程相同的CPU.

我做錯了嗎?

這個編程的輸出:

kernel: [ 956.816510] module_init

kernel: [ 956.816515] main thread cpu = 8

kernel: [ 956.816743] IN THREAD FUNCTION 1

kernel: [ 956.816748] t1 cpu = 8

kernel: [ 956.817057] IN THREAD FUNCTION 2

kernel: [ 956.817062] t2 cpu = 8

kernel: [ 961.815160] t1 cpu = 8

kernel: [ 962.814649] t2 cpu = 8

kernel: [ 966.816760] t1 cpu = 8

kernel: [ 968.815711] t2 cpu = 8

kernel: [ 971.818307] EXIT from thread function 1

kernel: [ 974.816813] EXIT from thread function 2

kernel: [ 974.816872] module_exit

總結

以上是生活随笔為你收集整理的linux下线程绑定内核,多线程 – 无法将内核线程绑定到CPU的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。