я могу заставить библиотеку C ++ использовать один поток?

Я использую проприетарную библиотеку C ++ в linux, скомпилированную через gcc, которая использует pthreads (я должен использовать флаг -lpthreads в gcc). У меня есть обертка вокруг этого, и я знаю, что библиотека использует несколько потоков.

Библиотека динамически использует несколько потоков — когда я ее вызываю, я вижу где-то между 20 и 1 потоками. Но я не хочу использовать набор задач. (У меня запущены другие процессы, и я хочу, чтобы система администрировала ядра).

Есть ли способ заставить мой исполняемый файл использовать один поток?
Либо во время компиляции, либо во время выполнения. Благодарю.

РЕДАКТИРОВАТЬ:
Я могу запустить исполняемый файл с набором задач, а затем cat / proc // status дает мне:

Состояние: R (работает)
Tgid: 1623
Pid: 1623
PPid: 31002
TracerPid: 0
UID: 500 500 500 500
Гид: 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,000000,000000000000000000000000,00000000,00000000,00000000,00000000000000,00000000,00000000,00000000000000,00000000,00000001
Mems_allowed_list: 0
добровольные переключатели: 3460
nonvoluunte_ctxt_switches: 24907

Так что, по всей видимости, он может запускать один поток

0

Решение

Не зная, что вы пытаетесь сделать, есть только один ответ: вы не можете.

Как бы вы ограничили что-то, чтобы не использовать несколько потоков? Отключение pthread_create() будет только калечить программу. Представьте, что библиотека порождает поток для выполнения асинхронной работы с файлом. Если вы запрещаете pthread_create(), что происходит с файловыми операциями? Библиотека теперь не работает должным образом, так как она не может выполнять свои файловые операции. Вам понадобится полная модернизация библиотеки; простое уничтожение файлового ввода-вывода в том же потоке (если это вообще возможно) могло бы привести к катастрофическим последствиям, так как предполагалось, что этот поток работает вхолостую и теперь заблокирован каким-либо тяжелым вводом-выводом.

Это общая идея. Независимо от того, действительно ли нужны потоки, если библиотека была разработана как многопоточная, вы не можете просто сделать ее однопоточной. Однако вы можете использовать taskset, как вы упомянули, или sched_setaffinity() (из C / C ++) для запуска процесса на одном CORE.

1

Другие решения

Не знаю много о внутренних процессах. Но почему бы вам не улучшить свою кодовую базу, чтобы ограничить создание более 1 потока. Вы можете вести подсчет потоков и прекратить создавать потоки в процессе, когда число достигает более 1.

0

По вопросам рекламы [email protected]