- 博客(10)
- 收藏
- 关注
原创 IO多路复用:select、poll、epoll
要想客户端和服务器能在网络中通信,那必须得使用Socket编程,它是进程间通信里比较特别的方式,特别之处在于它是可以跨主机间通信。Socket中文名叫作插口,双方进行网络通信前,各自得创建一个Socket,这相当于客户端和服务器都开了一个“口子”,双方读取和发送数据时,都通过这个“口子”,像弄了一根网线,一头插在客户端,一头插在服务端,然后进行通信。创建Socket时,可以指定网络层使用的是IPv4还是IPv6,传输层使用的是TCP还是UDP。UDP的Socket编程相对简单,下面只介绍基于TCP的Sock
2025-06-05 12:34:10
893
原创 Linux五种IO模型
在Linux系统中,实际上所有的I/O设备都被抽象为文件这个概念,一切皆文件无论是磁盘、网络数据、终端,还是进程间通信工具(如:管道pipe)等都被抽象为文件的概念。这种设计使得 I/O 操作可以通过统一的文件描述符(File Descriptor, FD)来管理。在Linux操作系统中的一切都被抽象成了文件,那么一个打开的文件是如何与应用程序进行对应呢?解决方案是使用文件描述符,当在进程中打开一个现有文件或者创建一个新文件时,内核向该进程返回一个文件描述符,用于对应这个打开/新建的文件。
2025-06-03 12:29:10
920
原创 完美转发基于万能引用,引用折叠以及std::forward模板函数来实现
完美转发是 C++11 引入的重要特性,允许我们编写函数模板,将参数原封不动地传递给其他函数,同时保留参数的const。
2025-05-20 22:52:12
1059
原创 const修饰指针变量、类成员函数
第二个const 左边是int*,相当于和地址绑定在一起,说明不能改变指针的值(即地址),第三个const左边是getX函数名,说明不能改变函数里面的东西,这个函数是只读的。如果 GetX() 去掉 const 修饰,则 PrintEntity 传递的 const e 即使没有改变对象的值,编译器也认为函数会改变对象的值,所以我们尽量按照要求将所有的不需要改变对象内容的函数都作为 const 成员函数。则指针指向的内容 8 不可改变。这时,const p 的指向的内容和指向的内存地址都已固定,不可改变。
2025-05-19 09:59:58
318
原创 设计模式之单例模式
懒汉模式的缺点是在创建实例对象的时候有安全问题,但这样可以减少内存的浪费(如果用不到就不去申请内存了)。在第17行,定义这个单例类的时候,就把这个静态的单例对象创建出来了。封装性可以保护对象的内部实现细节,防止外部代码直接访问或修改对象的内部状态,从而提高代码的安全性和可维护性。函数获取单例对象的时候,如果在单线程情况下是没有什么问题的,如果是多个线程,调用这个函数去访问单例对象就有问题了。此时,这个任务队列类的实例对象不是一个而是3个,很显然这与单例模式的定义是相悖的。
2025-05-17 22:50:48
617
原创 线程同步与互斥
在C++中,线程同步与互斥是多线程编程中的重要概念,用于解决多个线程同时访问共享资源时可能出现的数据竞争、死锁等问题,确保程序的正确性和稳定性。
2025-05-15 22:21:12
957
原创 leetcode 4、寻找两个正序数组的中位数(解题思路)
up主:凡三岁爱学习如果对时间复杂度的要求有 log,通常都需要用到二分查找,这道题也可以通过二分查找实现。①用一条边界把两个数组划分成左右两个相等的部分,若总长度为奇数,则让左半部分多一个数;②通过边界值去求中位数。若总长度为偶数:中位数=(左边最大值+右边最小值)/2.0=(maxLeft+minRight)/2.0若总长度为奇数:中位数=左边最大值=maxLeft还有四种需要考虑:比如:当数组A的边界i=0时,A[i-1]不存在,左边最大值直接取B数组边界左边的值即B[j-1],其余同理。
2025-05-11 23:17:15
516
原创 用shared_ptr和weak_ptr来实现双向循环链表以解决在循环引用场景下仅通过shared_ptr无法正确释放内存从而导致的内存泄漏问题
shared_ptr通过引用计数的方式管理内存,当进行拷贝或赋值操作时,每个shared_ptr都会记录有多少个其他的shared_ptr指向相同的对象,当引用计数为0时,内存将被自动释放。的场景下,shared_ptr无法正确释放内存。循环引用,顾名思义,A指向B,B指向A,在表示双向关系时,是很可能出现这种情况的。当对shared_ptr赋予新值,或被销毁时,引用计数会递减。管理的对象,但不会影响对象的生命周期。,可以打破循环引用,同时仍然能够访问对象。指针,确保后继节点的生命周期被正确管理;
2025-05-08 22:04:58
169
原创 类 “boost::asio:ip:address“ 没有成员 “make_address“等1.87版本
方法,但需要注意的是,这个方法在新的版本的 Boost.Asio 中已经被标记为。类已经被移除,因为它之前已经被标记为弃用。在 Boost.Asio 1.87.0 版本中,方法来解析主机名和端口,而不再需要单独的。函数来从字符串创建 IP 地址。
2025-02-26 15:57:10
506
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人