我在Linux上使用一个专有的C++库,通过gcc编译,该库使用pthreads(我必须在gcc上使用-lpthread标志)。我有一个包装器,我知道该库正在使用多个线程。
该库动态地使用多个线程 - 当我调用它时,我可以看到20到1个线程。 但是我不想使用taskset。(我有其他进程在运行,我希望系统管理核心)。
有没有一种方法可以强制我的可执行文件使用单个线程? 无论是在编译还是在运行时。谢谢。
编辑: 我可以使用taskset运行可执行文件,然后cat /proc/ /status给出:
状态:R(运行) Tgid:1623 Pid:1623 PPid:31002 TracerPid:0 Uid:500 500 500 500 Gid:100 100 100 100 Utrace:0 FDSize:256 Groups: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 Threads:1 SigQ:2/62004 SigPnd:0000000000000000 ShdPnd:0000000000000000 SigBlk:0000000000000000 SigIgn:0000000000000004 SigCgt:0000000180000000 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
因此,显然它可以运行单个线程。
有没有一种方法可以强制我的可执行文件使用单个线程? 无论是在编译还是在运行时。谢谢。
编辑: 我可以使用taskset运行可执行文件,然后cat /proc/ /status给出:
状态:R(运行) Tgid:1623 Pid:1623 PPid:31002 TracerPid:0 Uid:500 500 500 500 Gid:100 100 100 100 Utrace:0 FDSize:256 Groups: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 Threads:1 SigQ:2/62004 SigPnd:0000000000000000 ShdPnd:0000000000000000 SigBlk:0000000000000000 SigIgn:0000000000000004 SigCgt:0000000180000000 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
因此,显然它可以运行单个线程。