多进程多线程专题
首先搞并发编程必须懂原子操作
原子操作可参考的博客[]:http://t.zoukankan.com/ittinybird-p-4830834.html
0.并发编程的三大特性
原子性 有序性 可见性
1.什么是原子性
一个操作或多个操作,一次执行,中间不能被打断。要么全部执行并且不被打断,要么就都不执行。
2.可见性是什么?
当一个线程操作修改了内存,其他的线程会马上知道。
3.可见性可以通过什么去实现?
volatile关键字 可以实现改写之后,马上别的都会知道。
4.为什么volatile不能保证原子性
参考网址[]:
0.线程安全是什么?
多线程程序在运行过程中不会造成数据污染。
1.什么是原子操作
原子是指最小的,不可分割的。
原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。
在单处理器系统中一般单条指令能执行完的都是原子操作。
而在多处理器系统或者说多线程程序中不会被打断的操作。
原子操作可以理解为不需要用到互斥量加锁技术的多线程并发编程方式。
2.原子操作支持这样操作吗:myCount = myCount + 1
不支持
3.条件变量是什么?
4.互斥量是什么?
并发常考面试题:
考题大汇总链接[]:https://blog.csdn.net/qq_23350817/article/details/90178108
1.线程的基本概念和基本状态
2.多线程中栈与堆是公有的还是私有的
3.生产者消费者问题
这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。
4.读者写者问题
5.双线程读写队列数据案例
6.进程隔离是什么?有无线程隔离?
7.c++多线程编程与Linux原生多线程的区别?
8.多线程的理论有哪些?
9.多线程并发如何预防死锁?
10.为啥要有线程池?
为啥要有线程池
一般的多线程编程,往往是一个线程对应一个 ‘任务’ 。但由于线程的建立于销毁也会造成一部分开销,所以当任务过多的时候,若还是一个任务对应一个线程,线程的反复建立与销毁,会造成大量的的资源浪费。
11.什么是线程池?
线程池就是一种利用少量线程解决大量任务(线程数 < 任务数)的工具。
而高级的线程池会从线程的数量,线程的活跃时间,任务的存取策略等角度进行优化,以达到更高效目的。
线程池就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
12.线程池有哪些?
- 单线程的线程池
- 固定大小的线程池
- 可缓存的线程池
13.子进程会继承(共享)父进程的哪些资源?
14.会继承堆空间吗?
本文来自博客园,作者:快乐过了阈值,转载请注明原文链接:https://www.cnblogs.com/black-worrior-2000/p/16565371.html
墨愁前路无知己,天下谁人不识君。
浙公网安备 33010602011771号