线程基本函数简介

来源:互联网 发布:vod网络媒体播放器 编辑:程序博客网 时间:2024/06/08 09:39

一个进程内的所有线程共享同一个全局内存空间,注意同步问题。

一、五个基本线程函数

1.pthread_create函数

#incldue <pthread.h>int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *), void *arg)
(1)类似于fork函数,一个进程内的各个线程由线程ID标识的,数据类型为pthread_t,进程创建成功时,由指针tid返回;(2)pthread_attr_t指定线程的属性,通常为缺省值NULL;(3)创建线程时要指定一个线程启动函数,该函数的地址由参数func指定,该函数唯一调用的参数由指针arg指定;     如果需要给该函数传递多个参数,则将它们打包成一个结构,然后将其地址作为这个唯一的参数;     通用指针参数(void *)可以使得我们让指针指向任何我们想要指向的东西;(4)创建成功时返回0,创建失败时返回一个正的Exxx值。

2.pthread_join函数

#include <pthread.h>int pthread_join(pthread_t tid, void * *status)
(1)类似于waitpid函数,用于等待一个线程的终止(非任意线程),tid为所等待线程的ID;(2)如果指针status非空,那么所等待线程的返回值(指向一个对象的指针)将存放在status指向的位置;(3)执行成功时返回0,执行失败时返回一个正的Exxx值。

3.pthread_self函数

#include <pthread.h>pthread_t pthread_self(void)
(1)类似于getpid函数,用于获取线程在某个进程内标识自身的ID;(2)执行成功时返回线程ID;

4.pthread_detach函数

#include <pthread.h>int pthread_detach(pthread_t tid)
(1)该函数将指定的线程变为脱离的;该函数通常由想让自己脱离的线程使用 pthread_detach(pthread_self());(2)线程分为可汇合的(joinable)和脱离的(detached)。当可汇合的线程终止时,其线程ID和退出状态将保留,直到另    外一个线程调用pthread_join;脱离的线程像一个守护进程,当它终止时,所有资源都释放,所以不能用pthread_join等待它终止;如果一个线程需要知道另一个线程的终止时间,那么需要保留后面那个线程的可汇合性;(3)执行成功时返回0,执行失败时返回一个正的Exxx值。

5.pthread_exit函数

#include <pthread.h>void pthread_join(void *status)
(1)该函数是终止一个线程的方式之一;(2)如果该线程未脱离,则其线程ID和退出状态将一直保留到调用进程内的另外某个线程调用pthread_join为止;(3)指针status不能指向局部于调用线程的对象。

二、终止一个线程三种方法

1.线程调用pthread_exit()函数;
2.线程启动函数调用return,返回值就是线程的终止状态;
3.所在进程的main()函数返回,或者某个线程调用了exit()和_exit()函数,那么该进程会立刻终止,包括它的仍在运行的任意线程。

原创粉丝点击