Linux系统编程---线程概念

来源:互联网 发布:ps软件源码下载 编辑:程序博客网 时间:2024/05/18 10:25
1.建立线程
对于线程的操作都是通过pthread_t类型的线程ID来实现的。
创建线程
int pthread_create(pthread_t * thread, const pthread_attr_t *attr,
                   void *(*start)(void *), void *arg)

thread返回创建的线程的ID
attr用于设置线程的属性,一般设置为NULL,即使用默认属性
线程起始则是通过第三个函数指针来指示,函数的参数为void *,返回值为void *
arg可以为线程传递参数

当前线程调用pthread_create和新的线程被执行不存在同步关系,也就是说新线程在pthread_create未返回前可能已经运行甚至结束。

main函数可以看做是一种特殊的线程,一般称为主线程或者初始线程。
初始线程与普通线程的区别
1.接收的参数是不同的,初始线程为(int argc,char *argv[]),而普通线程为(void *)
2.初始线程继承UNIX进程的特性,从初始线程返回时,同时会终止所有其他线程,而普通线程不会影响其他线程。
3.初始线程一般使用的进程的堆栈,一般是可增长的足够尺寸,普通线程的堆栈一般是有限制的,可能会导致栈溢出。

main函数作为特殊的线程也可以使用pthread_cancle,pthread_join等函数,若希望初始线程退出时,其他线程继续运行,可以通过调用pthread_exit()函数。

2.线程的取消
int pthread_cancle(pthread_t thread)

3.线程的链接
int pthread_join(pthread_t  thread, void **value_ptr)

4.线程的分离
int pthread_detach(pthread_t thread)

5.线程的退出
void pthread_exit(void *value_ptr)

以上返回值
0:成功
其他:错误编号
6.线程的四种基本状态
就绪状态
运行状态
阻塞状态
  • 试图加锁一个已经被锁住的互斥量
  • 等待某个条件变量
  • 调用singwait等待某个尚未发生的信号
  • 执行无法立即完成的读写操作
  • 由于系统内存页出错的问题而阻塞
终止状态
  • 线程从启动函数返回
  • 线程调用phtread_exit函数
  • 线程自身调用pthread_cancle函数或者其他线程调用pthread_cancle函数
从启动函数或者pthread_exit函数返回与调用pthread_cancle外部区别在于,pthread_cancle返回值为PHTREAD_CANCLED
调用pthread_cancle和pthread_exit函数到终止状态前,线程会调用清理函数做些清理,清理过程通过pthread_cleanup_push注册,pthread_cleanup_pop删除。
线程的取消(终止线程)


7.线程的回收
线程达到终止状态时,有些资源不会被回收,例如线程的返回值,线程ID等
分离不会影响正在运行的线程,只是通知操作系统在线程结束时,可以回收线程资源。

一种比较特殊的是进程直接退出,例如main函数退出
线程分离属性,可以通过以下方式实现,
  • 创建线程时指定线程属性为可分离
  • 调用phtread_detach函数
  • 调用pthread_join函数
线程到达终止状态时并且为可分离时,系统会立即回收线程资源,如线程堆栈,保存寄存器的和返回值的内存空间等。
否则线程会一直处于终止状态到被分离的状态。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一直有电话骚扰怎么办 老打电话骚扰我怎么办 总有电话骚扰怎么办 狗一直抽搐不停怎么办 右眼皮一直抽搐怎么办 打包机不停的倒带不切带怎么办 频繁被电话骚扰怎么办 一直被骚扰电话怎么办 有电话短信骚扰怎么办 收到大量验证码怎么办? 每天有陌生电话怎么办 电话不停被骚扰怎么办 水龙头的乱溅怎么办 水龙头坏了喷水怎么办 水龙头水流很散怎么办 自来水往外喷水怎么办 手机有骚扰电话怎么办 半夜到南宁机场怎么办 得了水痘坐火车怎么办 香港账户被限制怎么办 司法拍卖车扣分怎么办 速递易已超期怎么办 e栈快递换微信怎么办 e栈快递柜打不开怎么办 小孩耳朵塞东西怎么办 把隐形眼镜吃了怎么办 街道分车位不公平怎么办 服务区修车被宰怎么办 2018高速逃费怎么办 高速不停车卡怎么办 独立显卡显存不够怎么办 rx470d买不到了怎么办? 南方避险基金到期怎么办 高铁票认证失败怎么办 高铁票三个小孩怎么办 12306取消三次后怎么办 外国人护照过期了怎么办 行李丢飞机上怎么办 学生票没次数了怎么办 去美国行李超重怎么办 12306密码找回失败怎么办