что произойдет, если pthread_detach вызывается в потоке, который уже возвращен - PullRequest
0 голосов
/ 07 сентября 2018

Для следующего кода, каково ожидаемое поведение, если созданный поток "thread_Id" возвращает / завершает свою работу "some_Function" до вызова "pthread_detach(thread_Id)"? будут ли освобождены ресурсы, используемые "thread_Id"?

pthread_create (& thread_Id, NULL, some_Function, & queue); ....

pthread_detach (thread_id)

// нет pthread_join (thread_Id, ...)

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вызов pthread_detach в потоке с окончанием срока службы неопределенное поведение :

Если приложение пытается использовать идентификатор потока, время жизни которого истекло, поведение не определено. "

Но рекомендация для реализации pthread_detach:

Если реализация обнаруживает использование идентификатора потока после окончания срока его службы, рекомендуется, чтобы функция завершилась сбоем и сообщила об ошибке [ESRCH].

0 голосов
/ 07 сентября 2018

Да, ресурсы уже готового потока будут автоматически освобождены.

Согласно руководству Linux pthread_detach(), оно дает сбой только по двум причинам:

EINVAL - thread is not a joinable thread.
ESRCH  - No thread with the ID thread could be found.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...