Каковы преимущества соединения резьбы? Если цель состоит в том, чтобы присоединиться к потоку, чтобы остановить поток A, пока поток B не завершит выполнение, например (B.join ()), почему бы не использовать для этого глобальную переменную?

1
user195488 25 Дек 2009 в 07:13

2 ответа

Лучший ответ

Поскольку join() позволяет A перейти в спящий режим и не использовать процессорное время до завершения B, а также гарантирует, что B полностью завершил работу, прежде чем продолжить работу с A. В общем, это намного более эффективно. Это также позволяет избежать хлопот с созданием дополнительной переменной.

6
Amber 25 Дек 2009 в 07:16

Другая причина, по которой вы хотите вызвать pthread_join() или pthread_detach() для потока, который был создан с флагом PTHREAD_CREATE_JOINABLE, заключается в том, что система может освободить все ресурсы, связанные с потоком после завершения потока. Отказ присоединиться или отсоединить присоединяемые потоки вызывает утечку памяти и других ресурсов до завершения процесса.

2
pierrotlefou 25 Дек 2009 в 07:55
В java нет ничего похожего на pthread_detach(). Означает ли это, что мы всегда должны использовать join()? Отсутствие использования join() означает, что jvm не будет освобождать ресурсы? Когда поток завершается без присоединения, освобождает ли jvm ReentrantLock? Удаляет ли он локальное хранилище потока (ThreadLocal<T>) автоматически?
 – 
Majid Azimi
21 Окт 2011 в 18:01