【九月打卡】第9天 C气象数据中心 13-11 线程池的实现
课程信息
课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
课程章节:13-11 线程池的实现
主讲老师: 吴从周
课程内容
实现数据服务总线的线程池
课程收获
1.实现的原理:在主线程中预先创建n个工作线程,使用主进程监听客户端的连接,当有新客户端连上来的时候,把它放入待处理队列。工作线程从队列中取出客户端连接,处理客户端的业务请求。
2.。实现的细节:
-
在队列中,存放的是客户端的socket
-
采用条件变量+互斥锁(正联网费者模型)实现队列功能。
3.线程的强制运行:在线程操作中,可以使用 join() 方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。
4.线程的休眠,在程序中允许一个线程进行暂时的休眠,直接使用 Thread.sleep() 即可实现休眠。
5.中断线程:当一个线程运行时,另外一个线程可以直接通过interrupt()方法中断其运行状态。
6.死锁的概念:同步可以保证资源共享操作的正确性,但是过多同步也会产生问题。例如,现在张三想要李四的画,李四想 要张三的书,张三对李四说“把你的画给我,我就给你书”,李四也对张三说“把你的书给我,我就给你画”两个人互相等 对方先行动,就这么干等没有结果,这实际上就是死锁的概念。
所谓死锁,就是两个线程都在等待对方先完成,造成程序的停滞,一般程序的死锁都是在程序运行时出现的。