pthread_t pthread_self(void);
功能:获取线程ID,其作用对应进程中 getpid() 函数;成功返回线程ID,失败没有值,
int pthread_create(pthread_t*thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void*arg);
功能:创建一个线程,返回值:成功:0; 失败:错误号 -----Linux环境下,所有线程特点,失败均直接返回错误号参数:
参数1:传出参数,保存系统为我们分配好的线程ID
参数2:通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数
参数3:函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束。
参数4:线程主函数执行期间所使用的参数。
注意:使用线程时记得下载线程库,因为线程是linux后来加上去的,运行程序时记得链接线程库-lpthread;
void pthread_exit(void *retval);
功能:将单个线程退出
参数:retval表示线程退出状态,通常传NULL
退出的函数作用:
return:返回到调用者那里去。
pthread_exit():退出单个线程
exit: 将进程退出。
int pthread_join(pthread_t thread, void **retval);
功能:阻塞等待线程退出,获取线程退出状态 ,回收子线程 其作用,对应进程中waitpid() 函数。
成功:0;失败:错误号
参数:thread:线程ID ;retval:存储线程结束状态
int pthread_detach(pthread_tthread);
功能:实现线程分离
成功:0;失败:错误号
线程分离状态:指定该状态,线程主动与主控线程断开关系。线程结束后,其退出状态不由其他线程获取,而直接自己自动释放。网络、多线程服务器常用;也可使用pthread_create函数参2(线程属性)来设置线程分离
注意:不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL错误
int pthread_cancel(pthread_t thread);
功能:杀死(取消)线程 其作用,对应进程中kill() 函数。
成功:0;失败:错误号
注意:线程的取消并不是实时的,而有一定的延时。需要等待线程到达某个取消点(检查点);可以执行命令man 7pthreads可以查看具备这些取消点的系统调用列表
int pthread_equal(pthread_t t1,pthread_t t2);
功能:比较两个线程ID是否相等
成功:0;失败:错误号
线程属性:
线程属性结构体详解:
typedef struct
{
int etachstate; //线程的分离状态
int schedpolicy; //线程调度策略
struct sched_param schedparam; //线程的调度参数
int inheritsched; //线程的继承性
int scope; //线程的作用域
size_t guardsize; //线程栈末尾的警戒缓冲区大小
int stackaddr_set;//线程的栈设置
void* stackaddr; //线程栈的位置
size_t stacksize; //线程栈的大小
} pthread_attr_t;
属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数之前调用。之后须用pthread_attr_destroy函数来释放资源。
intpthread_attr_init(pthread_attr_t *attr);
功能:初始化线程属性
成功:0;失败:错误号
int pthread_attr_setdetachstate(pthread_attr_t *attr, intdetachstate);
功能:设置线程是否分离;
参数: attr:已初始化的线程属性
detachstate: PTHREAD_CREATE_DETACHED(分离线程)
PTHREAD _CREATE_JOINABLE(非分离线程)
intpthread_attr_destroy(pthread_attr_t *attr);
功能:销毁线程属性所占用的资源
成功:0;失败:错误号