<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[microlovw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/microlovw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; microlovw]]></copyright><item><title><![CDATA[无处不在的生产者与消费者模型]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/146327328</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/146327328</guid><author>microlovw</author><pubDate>Mon, 17 Mar 2025 22:32:18 +0800</pubDate><description><![CDATA[街角的工厂里，机器日夜运转，工人们忙碌不停。他们生产着各种各样的商品，比如面包、饮料、日用品等。工厂的任务就是不停地制造这些商品，保证供应充足。]]></description><category></category></item><item><title><![CDATA[互斥与同步]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/146325387</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/146325387</guid><author>microlovw</author><pubDate>Mon, 17 Mar 2025 21:41:54 +0800</pubDate><description><![CDATA[先看结果：以下代码是我模拟创建线程抢票，由于不加锁导致票抢到了负数由于我封装了pthread，奉上Thread.hpp造成以上结果的原因就是在1、if（）操作不是原子操作2、线程的调度切换原子性:不会被任何调度机制打断的操作，该操作只有两态，要么完成，要么未完成数据被多次拿到的对策就是一次只允许一个人可以使用这一份资源。那么底层的原理就是有一个东西类似与这个令牌。但是我又怎么保障拿到这个令牌的时候别人不来抢呢？这时候我们就要保证拿令牌这个操作是原子操作了。]]></description><category></category></item><item><title><![CDATA[线程--轻量化进程]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/146161325</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/146161325</guid><author>microlovw</author><pubDate>Mon, 10 Mar 2025 20:22:00 +0800</pubDate><description><![CDATA[库函数-用户级线程：pthread_create （线程id，线程属性，函数指针，喂给线程函数的参数）  返回值成功为0，失败为错误码；进程的多个线程，很多书都说线程有独立栈，但是其实其它线程想访问也是能做到的，所以线程大多数都是共享的。线程创建出来，时间片也要瓜分，比如一个进程10hs，创建了5个线程，瓜分10hs，每个2毫秒。• 线程是进程的执⾏分⽀，线程出异常，就类似进程出异常，进⽽触发信号机制，终⽌进程，进程。线程有取消的函数，但是不建议取消，因为不知道线程的状态取消了的返回值是-1。]]></description><category></category></item><item><title><![CDATA[分页式存储管理--虚拟地址和多级页表]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/146161542</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/146161542</guid><author>microlovw</author><pubDate>Mon, 10 Mar 2025 19:52:08 +0800</pubDate><description><![CDATA[但 TLB 容量⽐较⼩，难免发⽣ Cache Miss ，这时候 MMU 还有保底的⽼武器⻚表，在⻚表中找到之后 MMU 除了把地址发到总线传给内存，还把这条映射关系给到TLB，让它记录⼀下刷新缓存。⻚太⼩，虽然可以减⼩⻚内碎⽚的⼤⼩，但是⻚太多，会使得⻚表太⻓⽽占⽤内存，同时系统频繁地进⾏⻚转化，加重系统开销。那么系统中共有⻚⾯ 1048576 个（1兆个），所以描述这么多⻚⾯的page结构体消耗的内存只不过40MB ，相对系统 4GB 内存⽽⾔，仅是很⼩的⼀部分罢了。⼀个⻚的⼤⼩等于⻚框的⼤⼩。]]></description><category></category></item><item><title><![CDATA[Linux操作系统--信号]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/145692030</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/145692030</guid><author>microlovw</author><pubDate>Tue, 18 Feb 2025 21:20:27 +0800</pubDate><description><![CDATA[pending表和block表的检测在3~4之间，这样就可以在处理，自定义信号的时候再次接受新来的信号，也只能同时接受俩信号。- 阻塞特定信号，信号产生了，一定把信号要进行pending(保存)，永远不递送，除非我们解除阻塞。- 注意，阻塞和忽略是不同的，只要信号被阻塞就不会递送，而忽略是在递送之后可选的一种处理动作。- 被阻塞的信号产生时将保持在未决状态，直到进程解除对此信号的阻塞，才执行递送的动作。SIG_DFL  default:默认。无论以什么方式发送信号，最终，都是转换到OS，让OS写入信号的。]]></description><category></category></item><item><title><![CDATA[Linux 操作系统中的管道与共享内存]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/144512158</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/144512158</guid><author>microlovw</author><pubDate>Mon, 16 Dec 2024 18:40:54 +0800</pubDate><description><![CDATA[Linux 操作系统中的管道和共享内存是强大的进程间通信机制。匿名管道适用于具有血缘关系的进程之间的单向通信，具有自动的同步互斥保护机制。命名管道是一种真正的文件，可以被多个进程访问，实现了更灵活的 IPC。共享内存提供了最快的通信速度，但需要用户自己实现保护机制。在实际应用中，根据不同的需求选择合适的 IPC 机制，可以提高系统的性能和可靠性。]]></description><category></category></item><item><title><![CDATA[搓个shell命令行！]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143925259</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143925259</guid><author>microlovw</author><pubDate>Wed, 20 Nov 2024 21:09:41 +0800</pubDate><description><![CDATA[本地变量表  ： a=100  这种不能通过环境变量和命令行参数传给子进程，但是可以echo$a所以echo也是内建命令。所以得出有些命令必须由子进程执行，有些命令，要由shell自己执行—内建命令 built command。cd命令有问题，因为子进程执行完cd我们退出来是在父进程，还是原来的路径，要改的是父进程的pwd。shell自己执行命令，本质是shell调用自己的函数，内建命令很少差不多占5%所以要加一个步骤，检查是否是内建命令，是就自己执行，作为一个shell，获取环境变量应该从系统的配置来。]]></description><category></category></item><item><title><![CDATA[操作系统--进程：从函数退出到程序替换与进程等待]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143906479</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143906479</guid><author>microlovw</author><pubDate>Wed, 20 Nov 2024 11:37:25 +0800</pubDate><description><![CDATA[我们的shell其实就相当于进程替换，学了进程替换就可以手搓命令行了]]></description><category></category></item><item><title><![CDATA[操作系统OS--进程]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143746160</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143746160</guid><author>microlovw</author><pubDate>Wed, 13 Nov 2024 16:42:43 +0800</pubDate><description><![CDATA[阻塞挂起状态，在内存严重不足的时候，代码和数据会换入到磁盘的swap分区，只有，取到数据进入运行队列的时候将数据换入，效率慢了，时间换空间。因为操作系统的底层是C语言写的，所以接口只能是C语言的接口，所有软件的底层，都必须和c直接或间接相关。命令行中，执行命令/执行程序，本质是bash的进程，创建的子进程了，由子进程执行我们的代码。使用系统调用，创建进程。对软硬件之间进行交互：对上要给用户提供一个稳定的，高效的，安全的运行环境(目的!对下软硬件资源的管理，稳定的，高效的，安全的，能进行良好的工作(手段)]]></description><category></category></item><item><title><![CDATA[Linux 中 Git 的使用方法及代码备份]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143363544</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143363544</guid><author>microlovw</author><pubDate>Wed, 30 Oct 2024 14:15:20 +0800</pubDate><description><![CDATA[在软件开发过程中，版本控制是至关重要的一环。Git 作为一款强大的去中心化分布式版本控制软件，为我们提供了高效的代码管理方式。尤其是在 Linux 系统中，Git 更是开发者们的得力助手。然而，当我们面临重装系统的情况时，可能会面临数据丢失的风险。本文将介绍在 Linux 中如何使用 Git，并结合 Gitee（码云）进行代码备份，以确保数据的安全性。]]></description><category></category></item><item><title><![CDATA[C++ 智能指针：高效的内存管理利器以及sharp_ptr模拟实现]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143124048</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143124048</guid><author>microlovw</author><pubDate>Mon, 21 Oct 2024 20:30:44 +0800</pubDate><description><![CDATA[C++ 的智能指针是一种强大的工具，可以帮助我们更有效地管理内存资源。通过 RAII 原理，智能指针在构造函数中获取资源，在析构函数中释放资源，确保资源的正确管理。不同类型的智能指针（和）提供了不同的功能，可以根据具体的需求选择合适的智能指针。在使用智能指针时，我们需要注意避免一些常见的陷阱，如循环引用等问题，以确保程序的正确性和稳定性。]]></description><category></category></item><item><title><![CDATA[C++11 异常处理：优势、劣势与规范]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/143123300</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/143123300</guid><author>microlovw</author><pubDate>Mon, 21 Oct 2024 19:02:33 +0800</pubDate><description><![CDATA[C++11 异常处理是一种强大的错误处理机制，它具有清晰的错误信息、简化错误处理、第三方库和测试框架支持等优点。然而，它也存在执行流混乱、性能开销、资源管理问题、标准库异常体系混乱和规范使用困难等缺点。在使用 C++11 异常处理时，我们需要充分考虑其优缺点，并遵循规范，以确保程序的稳定性和可靠性。]]></description><category></category></item><item><title><![CDATA[C++ 右值引用深入理解：特性、优化与底层]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/142962491</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/142962491</guid><author>microlovw</author><pubDate>Tue, 15 Oct 2024 19:54:59 +0800</pubDate><description><![CDATA[在 C++ 中，左右值的区分对于理解语言的行为至关重要。一般来说，可以取地址的是左值，不可以取地址的是右值。同时，被const修饰的通常也被视为左值。10。]]></description><category></category></item><item><title><![CDATA[红黑树：强大的数据结构之插入详解,附图]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/142469272</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/142469272</guid><author>microlovw</author><pubDate>Mon, 23 Sep 2024 21:49:14 +0800</pubDate><description><![CDATA[红黑树是一种自平衡二叉查找树，具有以下性质：节点要么是红色要么是黑色；根节点是黑色；每个叶子节点（NIL 节点）是黑色；每个红色节点的两个子节点都是黑色；从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。在插入新节点时，新节点初始颜色为红色，这样可以尽量减少对树结构的影响。但如果新节点的父节点也是红色，就会违反红黑树的性质，此时需要进行调整。新节点位于根节点：若新节点位于根节点，其没有父节点时，将该节点直接设为黑色即可。新节点的父节点已然是黑色。]]></description><category></category></item><item><title><![CDATA[AVL--平衡二叉搜索树详图分析]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/142362084</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/142362084</guid><author>microlovw</author><pubDate>Thu, 19 Sep 2024 22:18:38 +0800</pubDate><description><![CDATA[对于 AVL 树中的任何节点，其平衡因子只能是 - 1、0 或 1。当平衡因子为 0 时，表示该节点的左子树和右子树高度相等；当平衡因子为 1 时，表示左子树比右子树高 1；当平衡因子为 - 1 时，表示右子树比左子树高 1。如果在插入或删除操作后，某个节点的平衡因子超出了这个范围（即小于 - 1 或大于 1），则树的平衡被破坏，需要进行调整操作来恢复平衡]]></description><category></category></item><item><title><![CDATA[搜索二叉树--C++思路及实现]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/142102410</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/142102410</guid><author>microlovw</author><pubDate>Tue, 10 Sep 2024 16:33:08 +0800</pubDate><description><![CDATA[这个类定义了二叉搜索树的节点。它包含了键值对（_key和_value）以及指向左右子节点的指针（_left和_right构造函数允许用户在创建节点时指定键值对，也可以使用默认值。插入操作首先创建一个新节点。如果树为空，则新节点成为根节点。如果树不为空，从根节点开始遍历，根据键的大小决定向左子树或右子树移动，直到找到合适的插入位置。如果要插入的键已经存在于树中，则返回false，表示插入失败。图形解释：假设要插入键值对（5, "value5"）到一个已有的二叉搜索树中。]]></description><category></category></item><item><title><![CDATA[Linux入门篇 -- 从安装到执行！！！]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/141196522</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/141196522</guid><author>microlovw</author><pubDate>Wed, 14 Aug 2024 18:37:40 +0800</pubDate><description><![CDATA[对于刚学像Linux的和我一样的小白，看完这篇文章可以在Linux系统下简单敲几句代码。]]></description><category></category></item><item><title><![CDATA[《C++中继承与多态的深入剖析》]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/141061028</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/141061028</guid><author>microlovw</author><pubDate>Fri, 09 Aug 2024 14:26:04 +0800</pubDate><description><![CDATA[但需要注意的是，重写函数的缺省值仍然是父类中的设定。2. 赋值兼容转换：子类对象可以赋值给父类对象，但父类对象不能赋值给子类对象，这是由于子类可能包含父类所没有的额外信息。2. 多继承：一个子类拥有两个及以上的直接父类，这种形式可能会导致一些复杂的问题，如棱形继承带来的数据冗余和二义性。在 C++的编程世界中，继承与多态是两个至关重要的概念，它们为代码的组织、复用和灵活性提供了强大的支持。希望通过这篇博客，能让您对 C++中的继承与多态有更清晰的理解和掌握，从而编写出更加高效和灵活的代码。]]></description><category></category></item><item><title><![CDATA[C++初阶：泛型编程简介及模板的使用]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/138518011</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/138518011</guid><author>microlovw</author><pubDate>Tue, 07 May 2024 08:36:06 +0800</pubDate><description><![CDATA[泛型编程是一种编程范式，其核心思想是编写与特定数据类型无关的代码，使得代码具有更广泛的适用性和复用性。在C++中，泛型编程主要通过模板来实现。]]></description><category></category></item><item><title><![CDATA[C++初阶--类和对象练习之日期类的实现]]></title><link>https://blog.youkuaiyun.com/microlovw/article/details/138324683</link><guid>https://blog.youkuaiyun.com/microlovw/article/details/138324683</guid><author>microlovw</author><pubDate>Mon, 29 Apr 2024 20:44:33 +0800</pubDate><description><![CDATA[练习运算符重载，以及构造函数的实现，可以复制头文件，自己尝试写源文件。]]></description><category></category></item></channel></rss>