Освобождает ли pthread_detach стек, выделенный дочернему потоку, после завершения дочернего потока - PullRequest
0 голосов
/ 01 октября 2011

Я использовал inthder pthread_detach, чтобы освободить стек, выделенный дочернему потоку, но это не работает, я думаю, что это не освобождает память .....

Я не хочуиспользовать pthread_join.Я знаю, что объединение гарантирует мне освобождение стека для дочернего элемента, но я не хочу, чтобы родитель зависал до тех пор, пока дочерний поток не завершится, я хочу, чтобы мой родитель выполнял некоторую другую работу в это время.Итак, я использовал detach, так как он не заблокирует родительский поток.

Пожалуйста, помогите мне.Я застрял ..

Ответы [ 2 ]

1 голос
/ 01 октября 2011

это не работает

Да, это , это . Вы, вероятно, неверно истолковали свои наблюдения.

Я хочу, чтобы мои родители в то же время выполняли какую-то другую работу

Обычно это причина для создания потоков, и вы можете сделать это:

pthread_create(...);
do_some_work();     // both current and new threads work in parallel
pthread_join(...);  // wait for both threads to finish
report_results();

Я не хочу использовать pthread_join. Я знаю, что объединение убеждает меня освободить стек для ребенка

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

1 голос
/ 01 октября 2011

ДА - в соответствии с http://cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-16.htm освобождает память либо по окончании потока, либо сразу, если поток уже закончился ...

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

...