我在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可能有一个原因。 –