1.线程的概念
线程:进程的创建、销毁与切换存在着较大的时空开销,因此人们急需一种轻型的进程技术来减少开销。在80年代,线程的概念开始出现,线程被设计成进程的一个执行路径,同一个进程中的线程共享进程的资源,因此系统对线程的调度所需的成本远远小于进程。简单点来说线程就是一个执行事情的步骤,有他做事的方式,它是一个进程内部的控制序列。
进程与线程两者关系:进程可以包括线程,而线程只是进程的一部分。
2.线程的创建
pthread_create函数
pthread_create(pthread_t *thread,const pthread_attr_t *attr,void * (*start_routine)(void*),void*arg)
参数:1. 线程id pthread_t ptid;
参数:2 线程属性 一般为 NULL
参数:3 进程处理函数 创建后被执行
参数:4 回调函数的参数
返回值 成功为0 失败:错误号(利用strerror()可以查看错误原因,perror不可以)
注意点:线程创建后如果主线程先退出 则他儿子也要退出
3.线程的删除
int pthread_cancel(pthread_t pthread)
参数:进程id
注意点:在杀死子线程的内部必须做过一次系统调用(read write printf)
也可以设置取消点,点到在杀在回收
4.单个线程的退出
函数:pthread_exit(void *retval)
指针必须指向全局和堆,一般直接为0;
如果利用exit()去退出线程的话,子线程和主线程都会停止
而pthread_exit和return NULL只会退出单一线程
5.线程的回收
int pthread_join(pthread_t pthread,void **retval)
参数 1:线程id
参数2 :读取线程退出携带的信息,不需要则为NULL
6.线程的分离属性
1.线程属性变量 pthread_attr_t attr;
2.线程属性操作函数
1.init :int pthread_attr_init(&attr);
2.设置线程分离属性
int pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED(分离)或者PTHREAD_CREATE_IOINABLE(含义非分离))
3.释放线程资源函数
int pthread_attr_destroy(&attr)
7.线程同步概念
对于共享资源进行操作,但是存在CPU调度问题,若不处理,会引发数据混乱问题
,于是需要协调,然后按照所需要的顺序处理。