线程知识点

1、线程共享进程的堆,但拥有自己私有的栈——用于函数调用。
2、线程功能不属于c/c++标准库,链接时需要使用-pthread选项
3、线程功能属于c++11标准库,可以使用c++11提供的thread类定义线程对象。
4、pthread_create()函数在创建完毕后立即返回,它并不等待线程结束。
5、原线程与新线程如何执行与调度有关,程序不得依赖线程的先后执行的关系,可以使用同步机制确定线程的先后执行关系。

6、线程的退出方式有三种:

     线程函数结束执行
     调用pthread_exit()函数显式结束
     被其他线程"撤销"

7、使用pthread_join函数可等待子线程结束,获取子线程返回值

8、 线程分类:

      可联线程:缺省设置,终止时并不自动清除(类似僵尸进程),主线程必须调用
      分离线程:结束时自动清除,不能调用pthread_join()进行线程同步。
      可联线程通过pthread_detach()变为分离线程后,再也不能调用pthread_join()变成为可联线程。

9、pthread_candcel()函数,撤销线程,已撤销的线程可以联结,且必须联结,以释放其资源,除非其为分离线程。

10、线程撤销类型与状态:
       异步可撤销:在其执行的任何时刻都可撤销
       同步可撤销:线程可撤销,但撤销操作首先进入队列排队,在线程执行到特定撤销点时才可撤销
       不可撤销:撤销请求会被系统自动忽略
11、线程的局部存储,让线程拥有数据的独立副本,不能简单赋值或读取
       pthread_setspecific()函数:设置对应键的值
       pthread_getspecific()函数:读取对应键的值
12、线程清除
       线程清除函数:回调函数,单void *参数,无返回值
       目的:销毁线程退出或被撤销时未释放的资源
       pthread_cleanup_push(void (*routine)(void *)) 注册线程清除函数
       pthread_cleanup_pop  取消线程清除注册,传非零参数将执行线程清除工作

猜你喜欢

转载自blog.csdn.net/qq_26600237/article/details/80467202