簡體   English   中英

將兩個線程設置為相同的cpu親和力pthread_getaffinity_np

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM