界: Code Quality
代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。
Code Correctness: Premature Thread Termination
Abstract
如果父进程早于其产生的线程结束执行,线程会过早终止。
Explanation
对于通过从父进程的
例 1:以下代码会使用
main()
函数调用 pthread_create()
而产生的线程,如果父进程没有调用 pthread_exit()
而早于任何线程结束执行,则这些线程会过早终止。调用 pthread_exit()
可保证在其所有线程执行完毕之前,父进程保持活动状态。此外,父进程可以调用所有子线程上的 pthread_join
,并且确保它们将在进程结束之前完成。例 1:以下代码会使用
pthread_create()
函数创建一个线程,然后正常退出。如果子线程在 main()
函数返回时仍未结束执行,则该线程会被过早地终止。
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