![]() |
|
Модераторы: xvr |
![]()
|
|
| IoganeGambaPuti |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.1.2009 Репутация: нет Всего: нет |
Доброго вечера!
Есть простой код:
После компиляции: $ g++ -lpthreadth -o my_sample.o my_sample.c ,запускаю my_sample.o и вот что получаю в терминале:
а отладчик gdb вообще выдаёт:
Почему так?И почему дестукторы не срабатывают?Ведь thread2 ожидает завершение thread1 и после этого поидее все локальные переменные thread1 должны уничтожиться(т е объект "a").И почему не отрабатывает функция pthread_detach(thread2),ведь она должна очистить локальные переменные потока thread2. |
||||||
|
|||||||
| baldina |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
завершает выполнение потока в точке вызова, а деструкторы могут быть вызваны либо при возникновении исключения, либо при выходе из области видимости. здесь, скорее всего, вообще не нужен pthread_exit() Добавлено через 1 минуту и 50 секунд
ничего никому она не должна. она вообще не в курсе, что у тебя - C++ со своими с объектами, деструкторами и т.д. Добавлено через 3 минуты и 34 секунды
это масло масляное. обе строчки делают одно и то же. только до второй не доходит никогда. |
||||||||
|
|||||||||
| IoganeGambaPuti |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.1.2009 Репутация: нет Всего: нет |
OK
1)а почему тогда отладка в gdb и простой запуск кода отличаются? 2)и почему деструкторы не отрабатывают,у меня потоки завершаются же до завершения процесса main и поидее их стэк очищается,т е объекты a и b разрушаются?Если нет.то подскажи,пожалуйсто,как надо. |
|||
|
||||
| baldina |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
очистка стека - просто изменение указателя вершины стека. вызов деструкторов встраивается компилятором в точке выхода из функции. А здесь выход происходит совершенно другим образом. я же написал уже выше... по идее можно реализовать exit c вызовом деструкторов, но это требует совместных усилий разработчика компилятора и библиотеки.
Добавлено через 2 минуты и 17 секунд
оставь просто return.
|
||||||||||
|
|||||||||||
| IoganeGambaPuti |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.1.2009 Репутация: нет Всего: нет |
Спасибо разобрался.Кстати цитаты из тех же лекций по которым я разбираюсь
Если кто зайдёт с гугла или форумчани вот по многопоточности,хорошая вещь: http://ru.sun.com/research/materials/Irtegov_Tech.html Тема закрыта. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |