Отдельные и присоединяемые потоки POSIX - PullRequest
55 голосов
/ 21 сентября 2010

Я использую библиотеку pthread для создания и объединения потоков в C.

  1. Когда я должен создать тему как отдельную, с самого начала? Предлагает ли это какое-либо преимущество в производительности по сравнению с присоединяемым потоком?

  2. Законно ли не делать pthread_join() в присоединяемой (по умолчанию) теме? Или такой поток должен всегда использовать функцию detach() перед pthread_exit() ing?

1 Ответ

73 голосов
/ 21 сентября 2010
  1. Создайте отдельную ветку, когда вы знаете, что не хотите ждать ее с pthread_join(). Единственное преимущество в производительности заключается в том, что, когда отключенный поток завершается, его ресурсы могут быть освобождены немедленно, вместо того, чтобы ждать, пока поток не будет присоединен, прежде чем ресурсы могут быть освобождены.

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

...