参数指定,该函数的调用参数是一个指针arg,如果我们需要多个调用参数,我们必须将它们打包成一个结构,然后将其地址当作唯一的参数传递给起始函数。在fu
c和arg的声明中,fu
c函数取一个通用指针(void*)参数,并返回一个通用指针(void*),这就使得我们可以传递一个指针(指向任何我们想要指向的东西)给线程,由线程返回一个指针(同样指向任何我们想要指向的东西)调用成功,。返回0,出错时返回正Exxx值。Pthread函数不设置err
o。第二个函数:
i
tpthread_joi
pthread_ttidvoid**status
该函数等待一个线程终止。把线程和进程相比,pthread_creat类似于fork,而pthread_joi
类似于waitpid。我们必须要等待线程的tid,很可惜,我们没有办法等待任意一个线程结束。如果status指针非空,线程的返回值(一个指向某个对象的指针)将存放在status指向的位置。第三个函数:
pthread_tpthread_selfvoid
线程都有一个ID以在给定的进程内标识自己。线程ID由pthread_creat返回,我们可以pthread_self取得自己的线程ID。第四个函数:
i
tpthread_detachpthread_ttid
线程或者是可汇合的(joi
able)或者是脱离的(detached)。当可汇合的线程终止时,其线程ID和退出状态将保留,直到另外一个线程调用pthread_joi
。脱离的线程则像守护进程:当它终止时,所有的资源都释放,我们不能等待它终止。如果一个线程需要知道另一个线程什么时候终止,最好保留第二个线程的可汇合性。Pthread_detach函数将指定的线程变为脱离的。该函数通常被想脱离自己的线程调用,如:pthread_detachpthread_self第五个函数:
voidpthread_exitvoid*status
该函数终止线程。如果线程未脱离,其线程ID和退出状态将一直保留到调用进程中的某个其他线程调用pthread_joi
函数。指针status不能指向局部于调用线程的对象,因为线程终止时这些对象也消失。有两种其他方法可使线程终止:
f1启动线程的函数(pthread_creat的第3个参数)返回。既然该函数必须说明为返回一个void指针,该返回值便是线程的终止状态。2如果进程的mai
函数返回或者任何线程调用了exit,进程将终止,线程将随之终止。以下给出一个使用线程的TCP回射客户服务器的例子,完成的功能是客户端使用线程给服务器发从标准输入得到的字符,并在主线程中将从服务器端返回的字符显示到标准输出,服务器端将客户端发来的数据原样返回给客户端,每一个客户在服务器上对应一个线程。利用该程序框架,通过扩展客户端和服务器端的处理功能,可以完成多种基于多线r