多线程程序中,终止线程执行的方式有 3 种:
- 线程执行完成后,自行终止;
- 线程执行过程中遇到了 pthread_exit() 或者 return,也会终止执行;
- 线程执行过程中,接收到其它线程发送的“终止执行”的信号,然后终止执行。
- pthread_exit()
在 C 语言中,return 关键字用于终止函数执行,必要时还能将函数的执行结果反馈给调用者。return 关键字不仅可以用于普通函数,线程函数中也可以使用它。头文件中,提供有一个和 return 关键字相同功能的 pthread_exit() 函数。和之前不同,pthread_exit() 函数只适用于线程函数,而不能用于普通函数。 pthread_exit() 函数的语法格式如下:
void pthread_exit(void *retval);
retval 是void*
类型的指针,可以指向任何类型的数据,它指向的数据将作为线程退出时的返回值。如果线程不需要返回任何数据,将 retval 参数置为NULL
即可。
注意,retval 指针不能指向函数内部的局部数据(比如局部变量)。换句话说,pthread_exit() 函数不能返回一个指向局部数据的指针,否则很可能使程序运行结果出错甚至崩溃。
- pthread_exit()和return的区别
return 语句和 pthread_exit() 函数的含义不