gpt4 book ai didi

c++ - 我可以强制 C++ 库使用单线程吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:59 25 4
gpt4 key购买 nike

我在 linux 上使用专有的 C++ 库,通过 gcc 编译,它使用 pthreads(我必须在 gcc 上使用 -lpthreads 标志)。我有一个包装器,我知道该库正在使用多个线程。

该库动态使用多个线程 - 当我调用它时,我可以看到 20 到 1 个线程之间的任意位置。但我不想使用任务集。 (我有其他进程在运行,我希望系统管理核心)。

有没有办法强制我的可执行文件使用单线程?无论是在编译时还是在运行时。谢谢。

编辑:我可以使用任务集运行可执行文件,然后 cat/proc//status 给我:

State: R (running) 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

因此,显然,它可以运行单线程。

最佳答案

如果您不关心生成线程,只想让程序按顺序运行,您可以在 Linux 上使用 numactl。

取自this answer在 SuperUser 上,您可以使用

限制程序 一次执行一个线程
numactl --physcpubind=+1 /path/to/your/executable

来自numactl文档:

--physcpubind=cpus, -C cpus

Only execute process on cpus. This accepts cpu numbers as shown in the processor fields of /proc/cpuinfo, or relative cpus as in relative to the current cpuset.

该程序仍会生成线程,但仅限于在单个 CPU 上执行。这意味着一次只能运行一个线程。

关于c++ - 我可以强制 C++ 库使用单线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34895872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com