<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cjhbachelor的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cjhbachelor</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cjhbachelor]]></copyright><item><title><![CDATA[线程的同步和互斥]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/162684838</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/162684838</guid><author>cjhbachelor</author><pubDate>Thu, 09 Jul 2026 09:57:48 +0800</pubDate><description><![CDATA[本文通过售票系统案例剖析多线程并发安全问题及其解决方案。当多个线程同时访问共享变量ticket时，由于判断、输出和自减操作的非原子性，会出现超卖和数据不一致问题。核心原因在于ticket--等操作在底层需要多个步骤完成，线程切换可能导致中间状态被覆盖。解决方案是引入互斥锁机制，通过硬件（如关中断）或软件（标志位检查）方式实现原子操作。关键原则是所有线程必须遵守相同的加锁/解锁协议，才能有效保护临界资源。文章揭示了多线程编程中同步机制的必要性及其实现原理。]]></description><category></category></item><item><title><![CDATA[线程的控制]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/162430143</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/162430143</guid><author>cjhbachelor</author><pubDate>Mon, 06 Jul 2026 16:04:49 +0800</pubDate><description><![CDATA[本文深入探讨了线程的核心概念、性能优势、应用场景及编程注意事项。线程作为轻量级进程，共享进程资源但拥有独立的执行上下文，其切换速度优于进程，主要得益于虚拟地址空间不变和CPU缓存的高命中率。线程适用于IO密集型任务（如文件读写、网络请求）和计算密集型任务（需多核并行），但也面临健壮性降低、编程复杂度提升等挑战。文章还详细解析了pthread_create函数的参数传递机制，强调了类型安全转换的重要性，并提供了C和C++的代码示例。理解线程的关键在于把握其共享与隔离的平衡，合理规避并发风险。]]></description><category></category></item><item><title><![CDATA[_线程基础]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/162096640</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/162096640</guid><author>cjhbachelor</author><pubDate>Mon, 29 Jun 2026 19:08:14 +0800</pubDate><description><![CDATA[Linux线程与进程的核心机制 线程与进程的本质区分： 进程是资源分配的基本单位，包含代码、数据等资源 线程是执行调度的基本单位，共享进程资源但拥有独立执行上下文 Linux线程实现： 采用轻量级进程(LWP)模型，复用进程的内核结构task_struct，使线程成为共享地址空间的"缩小版进程" 内存管理机制： 物理内存按4KB页框管理，通过struct page数组组织 虚拟地址通过多级页表映射物理内存（10+10+12位划分） MMU硬件自动完成地址转换，支持懒加载和写时拷贝 线程库实现： pthrea]]></description><category></category></item><item><title><![CDATA[信号的中断]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161894542</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161894542</guid><author>cjhbachelor</author><pubDate>Wed, 17 Jun 2026 20:00:32 +0800</pubDate><description><![CDATA[计算机系统核心机制解析 本文摘要聚焦计算机系统的三大核心机制：CPU中断处理、进程调度和系统调用。 中断处理机制：CPU通过中断控制器响应外设请求，保存当前上下文后查询中断向量表执行处理程序，完成后恢复现场继续原任务。硬件中断是操作系统管理外设的关键机制。 进程调度原理：操作系统通过时钟中断强制获取控制权，利用时间片轮转实现多任务并发。当进程时间片（task_struct中的counter）耗尽时，调度器选择新进程执行上下文切换。 系统调用实现：用户程序通过软中断（如int 0x80）主动陷入内核，CPU从]]></description><category></category></item><item><title><![CDATA[信号的保存]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161835830</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161835830</guid><author>cjhbachelor</author><pubDate>Thu, 11 Jun 2026 13:52:43 +0800</pubDate><description><![CDATA[Linux信号机制通过三张核心表（Block、Pending、Handler）管理信号。信号产生后可能因阻塞而进入Pending状态，待条件允许时才会递达。Block表决定哪些信号被屏蔽，Pending表记录未处理的信号，Handler表定义信号处理方式。通过sigprocmask等函数可操作这些表，实现信号的精确控制。实验表明，信号处理函数执行时，Pending表中对应信号位已被清除，说明内核是在调用Handler前完成Pending状态的更新。]]></description><category></category></item><item><title><![CDATA[___信号]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161727841</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161727841</guid><author>cjhbachelor</author><pubDate>Sun, 07 Jun 2026 21:11:57 +0800</pubDate><description><![CDATA[摘要： 本文从生活实例引入Linux信号概念，解释信号作为异步事件通知机制的本质和作用。信号处理包括默认、忽略和自定义三种方式，生命周期涵盖产生、保存和处理三个阶段。通过signal()函数可重定义信号行为（如拦截Ctrl+C）。重点剖析程序崩溃原理：硬件检测异常（除零/野指针）触发OS向进程发送信号（SIGFPE/SIGSEGV），本质是修改进程PCB中的信号位图，最终导致进程终止。文章强调信号与信号量的本质区别，并提供核心API的代码示例和信号处理流程图解。（149字） 关键词： Linux信号、异步通]]></description><category></category></item><item><title><![CDATA[System V共享内存]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161597013</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161597013</guid><author>cjhbachelor</author><pubDate>Tue, 02 Jun 2026 14:49:48 +0800</pubDate><description><![CDATA[共享内存知识点]]></description><category></category></item><item><title><![CDATA[C++多态]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161505415</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161505415</guid><author>cjhbachelor</author><pubDate>Fri, 29 May 2026 11:20:58 +0800</pubDate><description><![CDATA[本文介绍了C++中的多态机制，重点分析了动态多态的实现原理。主要内容包括： 多态分为编译时多态（函数重载、模板）和运行时多态（虚函数机制） 动态多态的实现条件：必须通过基类指针/引用调用虚函数，且完成虚函数重写 虚函数重写要求：派生类虚函数与基类虚函数的返回值类型、函数名、参数列表完全相同 通过售票示例代码演示了多态的实际应用 深入分析了一个典型问题：虚函数默认参数的静态绑定特性与函数体的动态绑定特性如何共同作用，导致输出"B->1"的结果 重要结论：不要重新定义继承而来的虚函数的默认参数值 文章揭示了C+]]></description><category></category></item><item><title><![CDATA[c++继承]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161490907</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161490907</guid><author>cjhbachelor</author><pubDate>Thu, 28 May 2026 21:05:34 +0800</pubDate><description><![CDATA[本文介绍了C++继承机制的核心概念与应用。主要内容包括： 继承的核心作用：实现代码复用和抽象共同基类，子类可扩展并支持多态。 三种继承方式及权限变化： public继承保持原权限 protected继承将public降级为protected private继承将所有可见成员变为private 基类private成员始终不可见 继承中的特殊转换规则： 派生类对象可赋值给基类指针/引用（无需const） 派生类对象可切片赋值给基类对象 作用域规则： 派生类同名成员会隐藏基类成员 可通过基类::成员显式访问 函数]]></description><category></category></item><item><title><![CDATA[C++模板进阶]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161477788</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161477788</guid><author>cjhbachelor</author><pubDate>Thu, 28 May 2026 17:19:43 +0800</pubDate><description><![CDATA[本文介绍了C++模板的使用方法，包括函数模板和类模板。主要内容有： 函数模板分为只含类型参数和同时包含类型参数与非类型参数两种形式 类模板同样支持类型参数和非类型参数，非类型参数常用于指定固定容量 模板特化的概念和应用场景，包括函数模板特化和类模板特化 类模板特化分为全特化（参数完全确定）和偏特化（部分参数特化或参数类型限制） 函数模板特化的实现方法和注意事项 文章通过代码示例详细展示了各种模板的使用方式，并比较了特化与普通函数的区别，为C++模板编程提供了实用指导。]]></description><category></category></item><item><title><![CDATA[c++模板初阶]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161462567</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161462567</guid><author>cjhbachelor</author><pubDate>Wed, 27 May 2026 22:01:25 +0800</pubDate><description><![CDATA[本文介绍了C++中的模板机制，重点讲解了函数模板和类模板的使用方法。函数模板通过typename/class关键字定义通用函数，编译器根据调用时的参数类型自动实例化具体函数。文章详细说明了模板实例化过程、显式实例化方法以及模板参数匹配原则，指出模板函数与非模板函数共存时的调用优先级。类模板部分展示了如何定义模板类，并强调模板类声明和定义不宜分离到不同文件。全文通过代码示例演示了模板的实际应用，包括类型推导、显式指定类型等常见场景，为理解C++模板编程提供了实用指导。]]></description><category></category></item><item><title><![CDATA[C/C++内存管理]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161461978</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161461978</guid><author>cjhbachelor</author><pubDate>Wed, 27 May 2026 21:34:20 +0800</pubDate><description><![CDATA[本文对比了C/C++中的动态内存管理方式。C语言使用malloc/calloc/realloc进行内存分配，其中malloc不初始化内存，calloc会初始化为0，realloc用于调整内存大小。C++则通过new/delete操作符实现，new会自动调用构造函数，delete会调用析构函数。关键区别在于：C方式不涉及对象构造/析构，而C++方式会完整管理对象生命周期。文中通过代码示例演示了malloc/free与new/delete的实际差异，特别展示了后者如何自动处理构造和析构过程。内存管理时需注意配对]]></description><category></category></item><item><title><![CDATA[再探类和对象]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161455988</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161455988</guid><author>cjhbachelor</author><pubDate>Wed, 27 May 2026 20:46:43 +0800</pubDate><description><![CDATA[本文介绍了C++中构造函数初始化列表、类型转换、static成员和友元机制等核心概念。主要内容包括： 构造函数初始化列表的语法规则和注意事项，强调三类必须使用初始化列表的成员变量（引用、const、无默认构造函数的类类型）。 类型转换机制，说明隐式类型转换的条件和explicit关键字的作用。 static成员的用法，包括静态成员变量的共享特性和初始化要求，以及静态成员函数的特点和访问限制。 友元机制的特点和使用场景，通过示例展示了友元函数和友元类的声明方式及其访问权限。 这些特性在C++编程中具有重要作用]]></description><category></category></item><item><title><![CDATA[C++知识点：类和对象]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161452170</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161452170</guid><author>cjhbachelor</author><pubDate>Wed, 27 May 2026 14:59:45 +0800</pubDate><description><![CDATA[这篇文章详细介绍了C++中的6个默认成员函数，包括构造函数、析构函数和拷贝构造函数。主要内容包括： 构造函数：用于对象初始化，特点包括与类同名、无返回值、可重载等。编译器会自动生成默认构造函数，但用户定义后不再生成。 析构函数：用于对象销毁时的资源清理，特点包括类名前加~、无参数无返回值。编译器会自动生成默认析构函数，但对于需要释放资源的类必须自定义析构函数。 拷贝构造函数：用于对象拷贝的特殊构造函数，第一个参数必须是类类型的引用。编译器会生成默认拷贝构造函数，但对于包含指针成员的类需要自定义深拷贝实现。 ]]></description><category></category></item><item><title><![CDATA[C++知识点]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161429973</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161429973</guid><author>cjhbachelor</author><pubDate>Tue, 26 May 2026 21:40:24 +0800</pubDate><description><![CDATA[本文介绍了C++中几个核心概念：命名空间的三种使用方式（指定访问、using声明和using指令）；缺省参数的设置规则（必须从右向左连续设置）；函数重载的条件（参数列表不同，与返回值无关）；const引用的权限规则（可缩小不可放大权限）；内联函数的特性（减少调用开销，建议性展开）；类和对象的内存对齐规则（按成员对齐数分配）；以及this指针的原理（隐式传递当前对象地址）。这些概念涵盖了C++基础语法和面向对象编程的关键机制，对理解C++程序结构具有重要意义。]]></description><category></category></item><item><title><![CDATA[进程间通信]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161342684</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161342684</guid><author>cjhbachelor</author><pubDate>Tue, 26 May 2026 09:43:47 +0800</pubDate><description><![CDATA[本文系统性地介绍了进程间通信（IPC）的核心概念与实现方式。首先阐述了进程通信的四大目的：数据传输、资源共享、事件通知和进程控制。随后详细解析了三种主流IPC机制：管道（匿名/命名）、System V IPC（消息队列/共享内存/信号量）和POSIX IPC。重点剖析了匿名管道的实现原理，通过内核级缓冲区和独立句柄机制实现单向通信，并深入讲解了其五大特性：单向性、血缘限制、字节流传输、随进程生命周期和内置同步互斥。文章还通过代码示例演示了父子进程通过管道通信的具体实现，并分析了四种典型读写场景下的阻塞行为。]]></description><category></category></item><item><title><![CDATA[ELF动态库]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161287348</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161287348</guid><author>cjhbachelor</author><pubDate>Sat, 23 May 2026 10:41:51 +0800</pubDate><description><![CDATA[C语言程序启动时，第一个执行的函数并非main()而是_start()，这是通过反汇编分析验证的。程序编译阶段会将外部函数地址暂置为0，链接阶段进行地址修正。静态链接将库代码拷贝到程序中，而动态链接在加载时才解析函数地址。动态库通过共享内存机制实现资源复用，其加载过程涉及虚拟地址分配和缺页中断处理。_start()函数负责初始化堆栈、数据段和动态链接，确保程序正确执行。动态链接的延迟绑定机制提高了资源利用效率。]]></description><category></category></item><item><title><![CDATA[ELF与库加载]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161208096</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161208096</guid><author>cjhbachelor</author><pubDate>Thu, 21 May 2026 15:24:54 +0800</pubDate><description><![CDATA[本文总结了Linux下库链接的优先级规则与静态/动态链接机制，详细解析了ELF文件格式及其组成结构（ELF头、程序头表、节头表、节）。通过readelf工具演示了如何查看ELF文件的关键信息，并阐述了程序加载时虚拟地址空间的建立过程。文章还区分了"节"(Section)与"段"(Segment)的概念，指出加载器会将具有相同权限的节合并为段映射到内存。最后解释了编译器采用的平坦编址模式，为理解程序从编译到执行的完整生命周期提供了系统性的技术视角。]]></description><category></category></item><item><title><![CDATA[库的制作和原理]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161147161</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161147161</guid><author>cjhbachelor</author><pubDate>Mon, 18 May 2026 14:42:52 +0800</pubDate><description><![CDATA[本文介绍了库文件的本质和使用方法。库文件本质上是.o文件的集合，分为静态库(.a/.lib)和动态库(.so/.dll)。文章详细讲解了如何制作静态库和动态库：使用ar命令打包静态库，使用gcc -shared命令生成动态库。重点说明了库文件的发布方式，包括直接安装到系统目录、使用-I/-L/-l选项链接库文件，以及建立软链接等方法。对于动态库，还特别介绍了运行时查找问题的解决方案，如拷贝到系统目录、建立软链接或设置环境变量等。文章通过具体示例和Makefile脚本，完整展示了从库文件制作到使用的全过程。]]></description><category></category></item><item><title><![CDATA[文件系统done]]></title><link>https://blog.youkuaiyun.com/cjhbachelor/article/details/161144600</link><guid>https://blog.youkuaiyun.com/cjhbachelor/article/details/161144600</guid><author>cjhbachelor</author><pubDate>Sat, 16 May 2026 21:19:08 +0800</pubDate><description><![CDATA[本文介绍了Linux系统中的硬链接和软链接概念。硬链接通过创建文件名与inode的映射关系实现文件备份，删除文件时只有当硬链接数为0才会真正删除文件。目录的硬链接数与其子目录数量相关。软链接则是独立的文件，保存目标文件路径，类似于快捷方式，可以简化长路径操作。两者的主要区别在于：硬链接共享inode，软链接有独立inode；硬链接适用于文件备份，软链接用于创建快捷访问路径。文中还通过具体指令演示了两种链接的创建和使用场景。]]></description><category></category></item></channel></rss>