我在linux上使用專有的C++庫,通過gcc編譯,它使用pthreads(我必須在gcc上使用-lpthreads標誌)。我有一個包裝,並且我知道該庫正在使用多個線程。我可以強制C++庫使用單線程嗎?
庫使用多個線程動態 - 當我打電話時,我可以看到20個1個線程之間的任何地方。但我不想使用taskset。 (我有其他進程在運行,我希望系統管理核心)。
有沒有辦法強制我的可執行文件使用單線程? 無論是在編譯時還是在運行時。謝謝。
編輯: 我可以使用taskset運行可執行文件,然後執行cat/proc //狀態給了我:
狀態:R(運行) TGID:1623 PID:1623 PPID:31002 TracerPid:0 發表於:500 500 500 500 GID:100 100 100 100 Utrace:0 FDSize:256個 羣組:100 VmPeak:346528 KB VmSize:345956 KB VmLck:0 KB VmHWM:199816 KB VmRSS:188388 KB VmData:192120 KB VmStk:128 KB VmExe:656 KB vmLib中:12444 KB VmPTE:432 KB VmSwap:0 KB 主題:1 SigQ:62004分之2 SigPnd:0000000000000000 ShdPnd:0000000000000000 SigBlk:0000000000000000 SigIgn:0000000000000004 SigCgt:00000001.8億 CapInh:0000000000000000 CapPrm:0000000000000000 CapEff:0000000000000000 CapBnd:FFFFFFFFFFFFFFFF Cpus_allowed:02 Cpus_allowed_list:1 Mems_allowed:00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 Mems_allowed_list:0 voluntary_ctxt_switches:3460 nonvoluntary_ctxt_switches:24907
因此,顯然它可以運行單線程。
你都知道,圖書館將可能/可能不會再工作,如果你只允許1個線程?你可能是想限制執行你的可執行文件到單個內核? –
我需要測試可能性。我知道這可能行不通。 可執行文件使用lib,所以我不明白你的意思是「限制可執行文件而不是lib」。當我運行可執行文件時,它會從lib中調用多線程函數。 – mousomer
是的,圖書館依賴於這些線程。假設庫在2個不同的線程中處理2個消息隊列。如果您現在消除了多線程:允許哪個線程/消息隊列運行?那另一個呢?圖書館使用pthreads可能有一個原因。 –