[英]set two threads to the same cpu affinity pthread_getaffinity_np
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
std::cout << "current cpu: " << sched_getcpu() << std::endl;
CPU_SET(sched_getcpu(), &cpuset);
if (pthread_setaffinity_np(std_thread.getNativeHandle(), sizeof(cpu_set_t), &cpuset) == 0) {
std::cout << "Afinity ok!!!" << std::endl;
} else {
std::cout << "second thread set affinity failed." << std::endl;
}
基本上,我正在嘗試使主線程(main())和新創建的線程(std_thread)在同一CPU中運行。 該代碼打印出“ Afinity ok !!!” 但是當我檢查兩個線程在htop工具中使用的是哪個CPU時,它們會一直隨機更改,這意味着代碼失敗。
如果在代碼內沒有這樣做的taskset
則可以使用taskset
命令,並且可以在創建過程時以及在運行時完成
如果要在特定的CPU中啟動該進程,請將該數字指定為
taskset -c <CPUNumber> ProgramName
或動態地可以使用PID進行更改
taskset -cp <CPUNumber> PID
使用pthread_getaffinity_np()
,您可以在cpuset
中獲得線程的cpuset
。 如果檢查此cpu集的值,則應注意,它覆蓋了計算機的所有CPU。 實際上,默認情況下,線程可以使用計算機的任何CPU。 您的代碼所做的只是設置其他線程與整個計算機的親和力(換句話說,什么也沒有)。
您實際上應該在cpuset
設置一個cpu,然后設置兩個線程的親和力。 您還可以使用sched_getcpu()
獲取正在其中運行一個線程的cpu,在cpuset
設置此cpu,然后將兩個線程的親和性設置為此cpu集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.