线程基本函数:
线程基本函数:
- 创建线程:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine),void *arg);
功能:
创建线程
参数:
thread:线程ID变量的地址
attr:存储线程属性结构体指针
start_routine:线程入口函数指针
arg:线程如后函数参数
返回值:
成功返回0
- 退出线程:
void pthread_exit(void *retval);
功能:
退出线程。
参数:
该参数为一个指针,可以用作设置退出码,设值后的退出码可以被pthread_join()
函数得到。示例:
pthread_exit((void *)1)
使用pthread_join(tid, retval)函数,则退出码retval地址为里存储为1.返回值:
较任性,This function does not return to the caller.
- 线程回收函数:
int pthread_join(pthread_t thread, void **retval);
功能:
该函数被用来回收线程,当父线程回收子线程时调用,若子线程未退出则挂起等待。
参数:
thread:想要回收的子线程tid
retval:线程退出状态即退出码。如果目标线程被取消,则PTHREAD_CANCELED 被保存在*retval中
> 返回值:
>> 成功返回0,失败返回errno
- 线程分离函数:
int pthread_detach(pthread_t tid);
功能:
将该tid线程分离出去,分离后的线程结束后系统会自动回收资源。未被分离的线程退出后需要手动用pthread_join来回收资源,分离后的子线程不可用pthread_join回收。
返回值:
成功返回0,失败返回errno。
- 得到线程id:
#include <pthread.h>
pthread_t pthread_self(void)
功能:
得到线程自己tid,防止在发送消息时误将消息发送给自己。
- 线程发送信号:
int pthread_kill(pthread_t thread, int sig);
功能:
给线程发送信号。
原理和进程的一样,信号表也是相同的,但是影响范围不同。
发信号时不能采用进程信号的处理方式,否则但以线程受到信号,则影响整个线程族。
> 返回值:
>> 成功返回0,失败返回errno
- 线程屏蔽字设置:
int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);
功能:
设置信号屏蔽字。
参数:
how:SIG_BLOCK等宏,同进程
>> set:欲设置屏蔽字信号集
>> oldset:源屏蔽字信号集
>返回值:
>>成功返回0, 失败返回errno
- 线程取消,并非立即取消:
int pthread_cancel(pthread_t thread);
功能:
取消线程。
、
取消点一般位于系统函数中,可以用pthread_testcancel函数人共设置取消点。防止代码内没有调用系统函数而导致线程没有取消点。取消线程就像约会一样,人们并不是说要约会就立马约会的,而是商量好和时约会,等到时间后再出去
取消线程是在发出取消请求后,在下一次遇到取消点时取消线程,所以取消点应该设置在代码能够狗往复运行的地方。
线程cancel与否于线程是否取消没有关系。
9. 人工设置取消点:
void pthread_testcancel(void)
功能:
人工设置取消点。
若线程中不存在具有取消点的函数调用(系统调用),则人共设置取消点。
返回值:
This function does not return a value. If the calling thread is canceled as a consequence of a call to this function, then the function does not return.
10.线程id比较函数:
int pthread_equal(pthread_t t1, pthread_t t2);
功能:
判断两线程是否相等。
返回值:
If the two thread IDs are equal, pthread_equal() returns a nonzero value; otherwise, it returns 0.
杂谈:
递归10000次以上很容易就down。能用递归实现的都可以用迭代实现,能用迭代实现的不一定可以用递归实现。
ulimit -a 列出
ulimit -c ulimited 打开生成core文件开关
ulimit -c 0 关闭gdb core文件
bt 查看栈针ps -e -0 pid,lwp,command。
查看线程具体状况