一、线程的基本概念
1.用户线程(内核线程和轻量级线程开发用得比较少就不做介绍了)
- 建立在用户空间的多个用户级线程,映射倒轻量级进程后调度执行
- 用户线程在用户空间创建、同步、销毁,开销较低
- 每个线程具有独特的ID
2.使用说明:
- 程功能不属于C/C++标准库,链接时需用-pthread选项
- 线程功能属于C++11标准库,可用C++11提供的thread类定义线程对象,C++11标准库同时提供基本线程同步机制
3.进程和线程的比较
- 线程空间不独立,有问题的线程会影响其它线程,;进程空间独立,有问题的进程一般不会影响其它进程。
- 创建进程需要额外的性能开销。
- 线程用于开发细颗粒度并行性,进程用于开发粗颗粒度并行性
- 线程容易共享数据,进程共享数据必须使用进程间通讯机制。
(不想再抄知识点,这样收获并不大,我想在看视屏的时候多思考,不会的跳过,先建立体系,以后遇到的时候再捡起来学习就好。)
4.线程同步机制
资源竞争
5.互斥
6.死锁
互斥容易导致死锁问题
若某个线程在临界区内的操作导致异常,有可能无法解锁,从而导致其他线程被永久阻塞
若临界区代码有多路分支,其中部分分支提前结束,但没有执行解锁操作,其他线程依旧被永久阻塞
当多个线程同时申请多个资源时,加锁次序不同也可能导致死锁。
解决办法
资源获取即初始化(resource acquire is initialization,RAII)
使用互斥对象管理类模板自动管理资源
7.信号量
条件变量
散装问题、知识点
1.通过pstree命令,可以看到全系统的进程树结构。如果不希望合并相同的子树,使用pstree -a
二、散装知识点、问题
1.C++的内存模型是什么?堆栈又是个什么关系?什么东西放到堆里面什么东西放到栈里面?
2.哑型指针使用得挺多的,具体得意义在哪儿呢?