Я использую pthreads, которые не выделяют никаких локальных переменных. По причинам, о которых я не буду здесь говорить, мне нужна опция pthread_cancel()
, и потоки, которые я пишу, должны поддерживать ее (нет ресурсов для очистки, ОК, чтобы остановить выполнение в любой момент). В настоящий момент у меня есть проблема, потому что pthread_cancel
возвращается до того, как pthread фактически завершит работу, вызывая проблемы для общих ресурсов, к которым я хочу прикоснуться только после отмены потока.
Могу ли я узнать, когда мой pthread окончательно и правильно завершил? Возможно, есть функция для этого, которую я не нашел, или параметр, с которым я не знаком?
Будет
pthread_cancel(thread_handle);
pthread_join(thread_handle, NULL);
сделать трюк, или это не гарантировано (поскольку thread_handle
может быть уже недействительным)?
Я довольно новичок в pthreads, так что лучшие практики приветствуются (помимо "не используйте pthread_cancel()
", которые я уже выучил: P).