Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: Premature Thread Termination
Abstract
Se um processo pai encerrar sua execução normalmente antes dos threads que ele gerou, estes poderão ser encerrados prematuramente.
Explanation
Threads gerados ao chamar
Exemplo 1: O código a seguir usa
pthread_create()
a partir da função main()
do processo pai serão encerrados prematuramente se o processo pai encerrar sua execução antes dos threads que ele gerou, sem chamar pthread_exit()
. Chamar pthread_exit()
garante que o processo pai permanecerá ativo até que a execução de todos os seus threads tenha sido encerrada. Como alternativa, o processo pai pode chamar pthread_join
em todos os threads filho e garantir que eles serão concluídos antes da conclusão do processo.Exemplo 1: O código a seguir usa
pthread_create()
para criar um thread e depois é encerrado normalmente. Se a conclusão do thread filho não tiver sido encerrada até o retorno da função main()
, o thread será encerrado prematuramente.
void *Simple(void *threadid)
{
...
pthread_exit(NULL);
}
int main(int argc, char *argv[]) {
int rc;
pthread_t pt;
rc = pthread_create(&pt, NULL, Simple, (void *)t);
if (rc){
exit(-1);
}
}
References
[1] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Rule 1.3
[3] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
desc.controlflow.cpp.code_correctness_premature_thread_termination