![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
muduo笔记
文章平均质量分 70
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
3 多线程服务器的常用模型和适用场景
僵尸进程是指子进程在父进程之前结束了,但是父进程没有用wait或waitpid回收子进程。但是,如果父进程是一个服务器进程,一直循环着不退出,那子进程就会一直保持着僵尸状态。当系统发现孤儿进程时,init进程就收养孤儿进程,成为它的父亲,child进程exit后的资源回收就都由init进程来完成。在父进程中,fork返回新创建子进程的进程ID;两次fork()技法:就是先认为创建一个子进程,然后子进程继续fork出工作进程,然后子进程退出,这样,工作进程结束后就会由init进程回收资源。原创 2022-12-20 17:27:00 · 482 阅读 · 0 评论 -
2 互斥锁和条件变量实现线程同步
在应用程序中有4个进程thread1,thread2,thread3和thread4,有一个int类型的全局变量iCount。iCount初始化为0,thread1和thread2的功能是对iCount的加1,thread3的功能是对iCount的值减1,而thread4的功能是当iCount的值大于等于100时,打印提示信息并重置iCount=0。所以加锁后,必须等到wait()执行,解锁,然后才能发信号,这样就不会丢失了。可以看到4线程不停在轮询,每次都要加锁解锁,不仅CPU浪费,而且影响并发性。原创 2022-12-20 15:50:16 · 458 阅读 · 0 评论 -
1.线程安全的对象生命周期管理
shared_ptr其实由指向对象的指针和计数器组成,计数器加减操作是原子操作,所以这部分是线程安全的,但是指向对象的指针不是线程安全的。所以该做的是:多个线程同时访问一个shared_ptr,就应该加mutex保护,不需要加读写锁,互斥锁最简单。另外,尽量减少使用跨线程的对象,用流水线,生产者消费者,任务队列这些有规律的机制,最低限度得共享数据,是本质的好处。再在类中定义智能指针,防止重复析构。,虽然引用次数加减是原子操作,但是指针拷贝和引用次数两步操作 并不是原子操作,线程不安全,需要手动加锁解锁。原创 2022-12-20 14:18:02 · 398 阅读 · 0 评论