【图书推荐】《Linux C与C++一线开发实践(第2版)》_linux c与c++一线开发实践pdf-优快云博客
《Linux C与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)
线程安全退出是编写多线程程序时一个重要的事项。在Linux下,线程的结束通常由以下原因所致:
(1)在线程函数中调用pthread_exit函数。
(2)线程所属的进程结束了,比如进程调用了exit。
(3)线程函数执行结束后返回(return)了。
(4)线程被同一进程中的其他线程通知结束或取消。
第1种方式,与Windows下的线程退出函数ExitThread不同,pthread_exit不会导致C++对象被析构,所以可以放心使用。第2种方式最好不用,因为线程函数如果有C++对象,则C++对象不会被销毁。第3种方式推荐使用,线程函数执行到return后结束是最安全的方式,尽量将线程设计成这样的形式。第4种方式通常用于其他线程要求目标线程结束运行的情况,比如目标线程中执行一个耗时的复杂科学计算,但用户等不及想中途停止它,此时就可以向目标线程发送取消信号。其实,(1)和(3)属于线程自己主动终止,(2)和(4)属于被动终止,就是自己并不想终止,但外部线程希望自己终止。
一般情况下,进程中各个线程的运行是相互独立的,线程的终止并不会相互通知,也不会影响其他的线程。对于可连接线程,它终止后,所占用的资源并不会随着线程的终止而归还系统,而是仍为线程所在的进程持有,可以调用pthread_join函数来同步并释放资源(这一点前面已经讲过了,这里又讲一遍,希望读者能记住)。
1. 线程主动终止
线程主动终止一般是指线程函数中使用了return语句或调用了pthread_exit函数。函数pthread_exit声明如下:
void pthread_exit(void *retval);
其中,参数retval就是线程退出的时候返回给主线程的值。注意,线程函数的返回类型是void*。另外,在main线程中调用“pthread_exit(NULL);”的时候,将结束main线程,但进程并不立即退出。
下面来看一个线程主动终止的例子。
【例8.12】线程终止并得到线程的退出码
(1)打开Visual Studio Code,新建一个test.cpp文件,在test.cpp中输入代码:
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#define PTHREAD_NUM 2
void *thrfunc1(void *arg) // 第一个线程函数
{
static int count = 1; // 这里需要的是静态变量
pthread_exit((void*)(&count)); // 通过pthread_exit结束线程
}
void *thrfunc2(void *arg

最低0.47元/天 解锁文章
6779

被折叠的 条评论
为什么被折叠?



