LINUX.ORG.RU

c++ деструктор тред


0

0

Что происходит если в одном потоке выполняется метод класса
и в то же самое время в другом треде вызывается деструктор?

И как с этим бороться?

anonymous

> Что происходит если в одном потоке выполняется метод класса и в то же самое время в другом треде вызывается деструктор?

Херня какая-нибудь происходит.

> И как с этим бороться?


Выправлять руки и логику программы.

gaa ★★
()
Ответ на: комментарий от gaa

Понятно что херня.

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

В этом случае надо сперва убить все дополнительные потоки
(или дождаться пока они сами выйдут), или как?

anonymous
()
Ответ на: комментарий от anonymous

>В этом случае надо сперва убить все дополнительные потоки (или дождаться пока они сами выйдут), или как?

С начала раздать им всем статус "пора выходить", потом ждать завершения работы каждого треда.

Absurd ★★★
()
Ответ на: комментарий от anonymous

Обычно делают два варианта - graceful shutdown и abort. =) В первом варианте, пытаемся по-хорошему завершать все потоки. Просим их прикротить выполнение, ждем результата. Во втором мочим всех нафиг.

Ian ★★
()
Ответ на: комментарий от anonymous

Если не для себя пишешь -- то пофлашил всякие конфиги/логи/whatever, прибил процесс, вытер х№% об штору, и свободен. Если для себя -- то как сказали выше.

temp
()
Ответ на: комментарий от temp

>Если не для себя пишешь -- то пофлашил всякие конфиги/логи/whatever, прибил процесс, вытер х№% об штору, и свободен. Если для себя -- то как сказали выше.

exit(1);

и не паришься :)

imp ★★
()
Ответ на: комментарий от jtootf

Объект не удалится пока один из потоков будет держать shared_ptr. Вообще в многопоточных сетевых приложениях даже не надо пытаться освобождать ресурсы руками, потому что геморой с отладкой в этом случае будет обеспечен. Надо использовать shared_ptr и week_ptr.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.