рекурсивная многопоточность с C ++ делает ресурс временно недоступным

IE11: Если вы получаете код ошибки CSS3114 в инструментах dev, вам необходимо изменить первые биты файла шрифта. Это позволит IE установить шрифт.

Модуль Npm: вы можете использовать модуль ttembed-js npm, который внесет изменения для вас. https://www.npmjs.com/package/ttembed-js

Использование: ttembed-js path/to/Montserrat-Black.otf

0
задан Hadev 20 January 2019 в 19:17
поделиться

1 ответ

Вы создаете слишком много тем. Это похоже на бомбу fork(). Потоки являются очень тяжелым системным ресурсом. Используйте их экономно.

В функции void Childwork я вижу две ошибки:

  1. Как кто-то уже указал в комментариях, вы проверяете информационный уровень потока, а затем вы идете и создаете некоторые больше потоков независимо от предыдущей проверки.

  2. Внутри цикла for, который порождает ваши новые потоки, вы увеличиваете информационный уровень непосредственно перед тем, как вы создаете реальный поток. Однако вы увеличиваете только что созданный экземпляр ThreadInfo здесь ThreadInfo* childInfo = new ThreadInfo[(int)n]. Все экземпляры в childInfo поддерживают уровень 0. По существу, уровень каждого потока, который вы создаете, равен 1.

Как правило, избегайте использования потоков для достижения параллелизма для операций ввода-вывода (*). Просто используйте потоки для достижения параллелизма для независимых операций с процессором. Как правило, вам никогда не нужно больше потоков, чем у вас в вашем ядре (**). Наличие большего не улучшает параллелизм и не улучшает производительность.

(*) Вы всегда должны использовать прямые вызовы функций и систему, основанную на событиях, для запуска псевдоконкурентных операций ввода-вывода. Вам не нужно никаких потоков для этого. Например, TCP-серверу не нужны потоки для обслуживания тысяч клиентов.

(**) Это идеальный случай. На практике ваше программное обеспечение состоит из нескольких частей, разработанных независимыми разработчиками и поддерживаемых в разных режимах, поэтому вполне допустимо иметь несколько потоков, которых теоретически можно было бы избежать.

Многопоточность все еще остается ракетостроением в 2019 году. Особенно в C ++. Не делайте этого, если вы точно не знаете, что делаете. Вот хорошая серия сообщений в блоге , которые обрабатывают темы.

0
ответ дан Bruno Hendrickx 20 January 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: