界: Code Quality

代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。

Code Correctness: Premature Thread Termination

Abstract
如果父进程早于其产生的线程结束执行,线程会过早终止。
Explanation
对于通过从父进程的 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