muduo库-线程类Thread,当前线程类CurrentThread muduo库-线程类Thread,当前线程类CurrentThread 线程类Thread要解决的问题 从用户角度,一个线程类应该要提供什么给用户? 线程类最核心的内容显然是为用户提供另一个执行流,让用户程序能以线程方式并发执行(调用线程与新线程“同时”执行),但同时能共享同一个进程的内存空间。同时,作为用户,我们希望能对这个线程设置用户提供的线程函数,还有对线程进行控制,包括启动、停止、回收资源 2023-06-22 C++ > muduo #C++ #muduo
muduo库-线程安全相关类MutexLock MutexLockGuard muduo库-线程安全相关类MutexLock MutexLockGuard 互斥锁mutex的选择 互斥锁mutex有2种方案: C++11以后,使用std::mutex,当然,特殊应用场景下,也有另外三种:std::recursive_mutex(递归mutex类),std::timed_mutex(定时mutex类),recurisive_timed_mutex(定时递归mutex类); 2023-06-22 C++ > muduo #C++ #muduo
RAII原理 RAII原理 RAII是什么? RAII(Resource Acquisition Is Initialization)是由C++之父Bjarne Stroustrup提出的,中文翻译为资源获取即初始化,即使用局部对象来管理资源的技术称为资源获取即初始化; 这里的资源主要是指操作系统中有限的东西如内存、网络套接字等等,局部对象是指存储在栈的对象,它的生命周期是由操作系统来管理的,无需人工介入 2023-06-22 C++ > Effective C++ #C++ #Effective C++
muduo库-时间戳类Timestamp muduo库-时间戳类Timestamp 如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2023-06-26 23:43:00.000000",这种方式便于人查看,但不便于程序中的比较和计算。比如有2个时刻A和B,计算哪个时刻在前,哪个在后,或者要计算时刻A和B的时间差时,这种字符串表示方式就很麻烦。 我们想到将字符串形式的时刻,用自纪元时间(Epoch时间,1970-01-01 2023-06-21 C++ > muduo #C++ #muduo
muduo库-原子类AtomicIntegerT<T> muduo库-原子类AtomicIntegerT C++中的原子操作有两种实现方式: C++11以后,提供st::atomic可以实现T类型数据的原子操作,主要包括:初始化、读取值、写值、自增自减(i.e. 前置或后置++)等。 C++11以前的版本,需要用GCC编译器提供的原子操作接口,实现原子操作。 AtomicIntegerT模板类 muduo产生与C++11流行之前,因此用了第二种方案 2023-06-21 C++ > muduo #C++ #muduo
muduo库-标记类copyable noncopyable muduo库-标记类copyable noncopyable 值语义与引用语义 值语义指的是对象的拷贝与元对象无关,就像拷贝int一样。C++的内置类型(bool/int/double/char)都是值语义,标准库里的complex,pair,vector,map等等也都是值语义,拷贝之后就与原对象脱离关系。 与值语义对应的对象语义,或者叫做引用语义,对象语义指的是面向对象意义下的对象,对象拷贝是 2023-06-21 C++ > muduo #C++ #muduo
KMP算法模板 KMP算法模板 KMP算法的原理以及图解见如何更好地理解和掌握 KMP 算法? 下面给出KMP算法的模板: 1234567891011121314151617181920212223242526272829303132333435363738// KMP算法// 匹配成功返回匹配的起始位置,失败返回-1// haystack为主串,needle为模式串int KMP(string haystack 2023-06-08 数据结构与算法 #数据结构与算法 #leetcode
WSL下添加系统调用 WSL下添加系统调用 由于WSL的内核是在原版基础之上有做修改的,所以要先去下载内核的源码。https://github.com/microsoft/WSL2-Linux-Kernel. 查看当前系统内核版本 1uname -r 然后去源码中找到对应的版本并下载,下载完成后解压。 12tar -zvxf linux-msft-wsl-5.15.90.1.tar.gzcd WSL2-Linux-Ke 2023-06-05 #Linux
大数据期末复习 大数据期末复习 Ch1 Intruction What is big data? Big data is used to describe a massive volume of both structured and unstructured data that is so large that it's difficult to process using traditional databa 2023-06-02
前缀和数组与差分数组 前缀和数组与差分数组 一维前缀和 对于一维数组nums,其前缀和数组prefix为 \[ prefix[i] = \sum\limits^{i}_{1} nums[i] \] 实际中多在前面加一个0,这样prefix[i]就刚好是nums数组的前i项和。 一维差分数组 一维数组nums的差分数组diff定义: \[ diff[i] = nums[i] - nums[i - 1] \] 二维差分、二 2023-06-01 数据结构与算法 #leetcode