线程——基本函数

线程基本函数:

线程基本函数:
  1. 创建线程:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine),void *arg);

功能:

创建线程

参数:

thread:线程ID变量的地址

attr:存储线程属性结构体指针

start_routine:线程入口函数指针

arg:线程如后函数参数

返回值:

成功返回0

  1. 退出线程:
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.

  1. 线程回收函数:
int pthread_join(pthread_t thread, void **retval);

功能:

该函数被用来回收线程,当父线程回收子线程时调用,若子线程未退出则挂起等待。

参数:

thread:想要回收的子线程tid

retval:线程退出状态即退出码。如果目标线程被取消,则PTHREAD_CANCELED 被保存在*retval中

   > 返回值:
>> 成功返回0,失败返回errno
  1. 线程分离函数:
int pthread_detach(pthread_t tid);

功能:

将该tid线程分离出去,分离后的线程结束后系统会自动回收资源。未被分离的线程退出后需要手动用pthread_join来回收资源,分离后的子线程不可用pthread_join回收。

返回值:

成功返回0,失败返回errno。

  1. 得到线程id:
#include <pthread.h>
pthread_t pthread_self(void)

功能:

得到线程自己tid,防止在发送消息时误将消息发送给自己。

  1. 线程发送信号:
int pthread_kill(pthread_t thread, int sig);

功能:

给线程发送信号。

原理和进程的一样,信号表也是相同的,但是影响范围不同。

发信号时不能采用进程信号的处理方式,否则但以线程受到信号,则影响整个线程族。

> 返回值:
   >> 成功返回0,失败返回errno
  1. 线程屏蔽字设置:
int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

功能:

设置信号屏蔽字。

参数:

how:SIG_BLOCK等宏,同进程

>> set:欲设置屏蔽字信号集

>> oldset:源屏蔽字信号集

 >返回值:
   >>成功返回0, 失败返回errno
  1. 线程取消,并非立即取消:
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.

杂谈:
  1. 递归10000次以上很容易就down。能用递归实现的都可以用迭代实现,能用迭代实现的不一定可以用递归实现。

  2. ulimit -a 列出

    ulimit -c ulimited 打开生成core文件开关
    ulimit -c 0 关闭

  3. gdb core文件
    bt 查看栈针

  4. ps -e -0 pid,lwp,command。
    查看线程具体状况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值