Я использую проприетарную библиотеку C++ на linux, скомпилированную через gcc, которая использует pthreads (я должен использовать флаг -lpthreads на gcc). У меня есть обертка вокруг него, и я знаю, что библиотека использует несколько потоков.Могу ли я заставить C++-библиотеку использовать один поток?
Библиотека использует несколько потоков динамически - когда я ее называю, я вижу где угодно между 20 потоками 1. Но я не хочу использовать набор задач. (У меня есть другие процессы, и я хочу, чтобы система администрировала ядра).
Есть ли способ заставить мой исполняемый файл использовать один поток? Либо при компиляции, либо во время выполнения. Благодарю.
EDIT: я могу запустить исполняемый файл с набор задач, а затем кошка/Proc // статус дает мне:
State: R (бег) Tgid: 1623 Pid: 1623 PPID: 31002 TracerPid: 0 UID: 500 500 500 500 Gid: 100 100 100 100 Utrace: 0 FDSize: 256 Группы: 100 VmPeak: 346528 кБ VmSize: 345956 кБ VmLck: 0 кБVmHWM: 199816 кБ VmRSS: 188388 кБ VmData: 192120 кБ VmStk: 128 кБ VmExe: 656 кБ VmLib: 12444 кБ VmPTE: 432 кБ VmSwap: 0 кБ Тем: 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
Таким образом, очевидно, что он может работать с одной нитью.
Вы знаете, что библиотека, возможно, вероятно, больше не работает, если вы разрешаете только один поток? Возможно, вы хотите ограничить выполнение своего исполняемого файла одним ядром? –
Мне нужно проверить возможность. Я знаю, это может не сработать. Исполняемый файл использует lib, поэтому я не понимаю, что вы подразумеваете под «ограничением исполняемого файла, а не lib». Когда я запускаю исполняемый файл, он вызывает многопоточные функции из lib. – mousomer
Да, и библиотека опирается на эти потоки. Скажем, библиотека обрабатывает 2 очереди сообщений в 2 разных потоках. Если теперь вы устраните многопоточность: какая очередь потоков/сообщений разрешена? А как насчет другой? Вероятно, есть причина, по которой библиотека использует pthreads. –