线程的创建
(1)线程创建函数
功能:创建一个具有制定参数的线程
形参:thread是要创建的线程的线程的id指针
pthread_t类型的定义是:typedef unsigned long int pthread_t;(打印的时候使用%lu或%u的方式)
attr:创建线程时的线程属性(设置NULL表示使用默认线程属性)
start_routine:指向的是线程将要运行的函数
arg:指向的是线程运行函数的形参
返回值:若线程创建成功返回0,;若失败,返回的是错误的编号
(2)等待线程结束函数
pthread_join()即是子线程合入主线程,主线程阻塞等待子线程结束,然后回收子线程资源。
功能:pthread_join函数以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回,如果线程已经结束,那么该函数立即返回。并且thread指向的函数必须是joinable的。
?什么是joinable?
在linux下,pthread有两种状态:joinable和unjoinable.如果线程是joinable状态时,当线程函数自己返回退出时或pthread_exit()时不会释放线程所占用的堆栈或线程标识符,只有调用pthread_join才能将这些资源释放。而如果是unjoinable状态,则在线程函数自己返回或退出或pthread_exit()时则会自动释放它所占用的那些资源.
2.unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己, 如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。
thread:线程标识符,即线程id,
retval:用户定义的指针,用来存储被等待线程的返回值
返回值:若线程创建成功返回0,;若失败,返回的是错误的编号.