springfram
静态线程安全。对于普通的方法来说,它是线程安全的,只要线程没有在方法中途停止,它就是安全的。it只是可能会有不一致的数据。多线程不是两个线程同时运行,更不是两个线程同时运行在同一个方法上。任何时候都只有一个线程在运行。
要回答这个问题,我们必须首先找出关闭或退出线程的方法。
线程退出模式
如果进程中的任何线程调用exit、_exit或_exit,则整个进程终止。同样,当信号的默认动作是终止进程时,发送给线程的信号将终止整个进程。单线程有三种方法可以在不终止整个进程的情况下退出其控制流。
一个线程可以简单地从线程处理程序返回,返回值是thread的退出代码。
该线程可以被同一进程中的另一个线程取消。
这个线程可以调用pthread_exi。
线程出口的返回值
#includeltpthread.hgtvoidpthread_exit(void*rval_ptr)
#includeltpthread.hgtintpthread_join(pthread_tthread,void**rval_ptr)
pthread_join函数的rval_ptr参数是一个无类型指针。进程中的其他线程可以通过调用pthread_join函数来使用rval_ptr指针,调用它会阻塞线程,直到指定的线程调用pthread_exit或从其线程处理程序返回或被取消。如果只从它的线程处理程序返回,rval_ptr将包含返回代码。如果线程被取消,则由rval_ptr指定的内存位置被设置为pthread_canceled。
通过调用pthread_join,加入的线程将被自动置于分离状态。如果线程已经处于分离状态,pthread_join可能会失败并返回。回到艾因瓦尔。如果我们对线程的返回值不感兴趣,我们可以将rval_ptr设置为null。在这种情况下,调用pthread_join允许我们等待指定的线程,而不检索线程的终止状态。
下图显示了如何从终止的线程中获取退出代码。