Использовать или не использовать метод join () с бесконечными циклами

0

Предположим, что объект X должен работать вечно. X запускает потоки с бесконечными циклами внутри, поэтому программа никогда не выйдет.

Мой вопрос таков: хорошо ли использовать метод join() вообще, например, в деконструкторе, или было бы более целесообразно делать что-то вроде

int main() {
   X myX;
   while(1) {
   }
   return 0;
}

Существуют ли различия между этими двумя подходами?

  • 0
    Я считаю плохой практикой предполагать, что программа может или должна работать вечно. У меня есть потоки аппаратного мониторинга, которые зацикливаются, но у меня есть механизм прерывания потока, поэтому я могу корректно завершить работу.
  • 0
    Я считаю плохой практикой предполагать, что программа может или должна работать вечно - неправильно.
Показать ещё 2 комментария
Теги:
class
multithreading
infinite-loop

2 ответа

1
Лучший ответ

Иногда это требуется, часто это не так. Если вы можете проектировать свое приложение так, чтобы оно не было, тем лучше.

  • 0
    Спасибо за комментарий. Когда вы говорите «иногда это требуется, иногда нет», вы ссылаетесь на функцию join () или на while (1) внутри main?
1

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

  • 1
    конечно, но для встраиваемых устройств или даже микроконтроллеров я видел while (1) довольно часто в рамках «основной» программы. Отсюда и мой вопрос.
  • 1
    Потоки времени жизни приложения не всегда (т.е. почти никогда) нуждаются в явном завершении и очистке.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню