线程

线程概念

进程:有独立的进程地址空间,有独立的PCB。 分配资源的最小单位。
线程:没有独立的进程地址空间,有独立的PCB。 最小执行单位。
ps -Lf 进程ID ---->线程号LWP。CPU最小执行的单位。

线程共享:

  1. 文件描述符表
  2. 每种信号的处理方式
  3. 当前工作目录
  4. 用户ID组ID
  5. 内存地址空间(.text .data .bss heap 共享库)

线程独享:

  1. 线程id
  2. 内核栈用户栈
  3. errno变量(虽然他是全局变量)
  4. 信号屏蔽字
  5. 调度优先级

线程控制原语

pthread_self

获取线程id,线程id是进程内部识别标志

pthread_t pthread_self(void)  //成功,0;不会失败
//pthread_t 在linux下为 unsigned long
pthread_create

创建一个线程

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
//成功,0;失败,错误号
/*
thread:保存为我们分配好是线程id
attr:线程属性,通常传NULL
start_rontine:回调函数,线程主函数,该函数结束则线程结束
arg:线程主函数所用参数
*/
pthread_exit
  1. return:返回到调用者
  2. pthread_exit:调用该函数的线程退出
  3. exit:将进程退出
void pthread_exit(void *retval)
//retval:表示退出的状态
pthread_join

阻塞等待线程退出,回去线程退出状态

  1. 线程通过return返回,retval所指向的单元存放,线程函数的返回值
  2. 线程调用pthread_exit,retval所指向的单元存放,pthread_exit的参数
  3. 线程被别的线程调用pthread_cancel异常终止,retval所指向的单元存放,常数PTHREAD_CANCELED
  4. 如果不关心线程终止状态,可以传NULL
int phtread_join(pthread_t thread,void **retval) //成功,0;失败,错误号
pthread_detach

分离线程。线程结束后,其退出转态不有其他线程获取,而直接自己自动释放。

int phtread_detach(pthread_t thread);  //成功,0;失败,错误号
pthread_cancel

杀死线程。需要有取消点(系统调用进入内核),如果没有可以调用 pthread_testcancel()自行设置取消点。

int pthread_cancel(pthread_t thread);  //成功,0;失败,错误号
进程线程对比
进程线程
fork()pthread_create()
getpid()pthread_self()
exit()pthread_exit()
wait()/waitpid()pthread_jion()
kill()pthread_cancel()
pthread_detach()

线程属性

设置分离属性
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_create(&tid,&attr,tft,NULL);
pthread_init_destroy(&attr);   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值