![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 81
always_ascending
好好学习
展开
-
Linux epoll 与 Windows IOCP比较
前言epoll 和 IOCP(IO Completion Ports) 分别是 Linux 和 Windows 系统上的高效网络模型。相比其他网络模型,同样是 polling 方式,这两种模型有如下特点:在系统资源允许下,监控的文件描述符没有上限。多线程同时监视和修改文件描述符是可行的,少量的线程即可实现支持大量连接的服务端程序。这两种模型的事件通知会有一定开销。如果应用程序不需要太多的客户端连接,select 和 poll 是更合适的模型。epoll 和 IOCP 的设计目的是应付成千上万的连接原创 2022-01-15 23:50:57 · 3193 阅读 · 0 评论 -
C/C++ 实现内存泄露检测之一
前言当动态申请的内存在其管理者(指针)的生命周期结束后,没有被归还给操作系统时,就发生了内存泄露,“泄露”的内存在应用程序退出前无法被访问,且无法被归还。随着程序的持续地运行,“泄露”的内存越多,可用内存就越少,久而久之,应用程序将面临无法再动态申请内存的窘境,更严重将导致程序崩溃。为了避免这种现象的发生,除了在开发过程中进行正确地小心地管理内存外(事实上即使小心谨慎也难免出错),内存泄露检测工具将为我们提供更加有效的保障。该系列将探讨几种内存泄露检测的实现方式。这些实现方式的出发点就是对 mallo原创 2022-01-09 18:56:26 · 588 阅读 · 0 评论 -
C/C++ 编程中常见的内存错误
前言没有 Java 中垃圾回收机制,也没有 Rust 中的编译期类型检查机制,C/C++ 要求开发人员自己管理内存(合理申请内存,并及时归还),确保内存安全是应用程序开发者的责任。毕竟好的厨子不应该将厨房弄得一团糟;-)C/C++ 程序中各种因内存产生的错误大致有以下几种情况,这些错误一般出现在程序运行期间,有些错误一旦出现,往往是“致命”的。以下示例使用 C 语言风格,其中大部分实例将 malloc/realloc 替换成 new, free 替换成 delete 可以阐释 C++ 中类似的操原创 2022-01-09 12:06:59 · 730 阅读 · 0 评论 -
单例模式的线程安全
前言单例模式(Singleton)几乎是人尽皆知的设计模式了,它限制一个对象只能实例化一次,且该对象的生命周期一般与整个应用的生命周期一致(否则,单例模式完全可以被普通类对象替代)。单例对象应该允许多线程访问,确保单例对象是线程安全的十分有必要。单例由于其生命周期特点,一般被实现为指针对象或静态对象,下面将分别讨论这两种情况的线程安全实现。静态指针变量下面实现一个基本的单例对象:// Example 1class Singleton{private: Singleton() = de原创 2021-12-31 22:08:01 · 6583 阅读 · 2 评论 -
Linux IO 多路复用(select、poll、epoll)
Linux IO 模型 (select、poll、epoll)1. select 详解及优缺点2. poll 详解及优缺点3. epoll 详解及优缺点原创 2021-12-30 23:36:56 · 1085 阅读 · 0 评论 -
并发编程笔记
前言在程序设计过程中,难免涉及操作系统、多进程、多线程、数据库等领域。在这些领域内,确保对共享资源的异步操作不出差错,是每个程序开发者必须要考虑的问题。面对并发问题,除了需要谨慎和小心外,引入并发控制策略是解决问题的主要手段,常见的相关技术有锁、互斥量、信号量、原子操作等。一、锁(lock)1.1 概念锁是一个抽象概念,是一种保护共享资源访问的同步化技术。锁有两个操作:acquire 和 release。它一次最多只允许一个线程获取,一旦所有权被某一线程获取,其他线程只能等待该线程释放锁才能访问被保原创 2021-12-29 22:36:45 · 354 阅读 · 0 评论