<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[herderl的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/herderl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; herderl]]></copyright><item><title><![CDATA[【无标题】读写锁（Read-Write Lock）]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/151146665</link><guid>https://blog.youkuaiyun.com/herderl/article/details/151146665</guid><author>herderl</author><pubDate>Wed, 03 Sep 2025 13:11:34 +0800</pubDate><description><![CDATA[读写锁：高效解决&quot;读多写少&quot;并发问题 读写锁是一种针对共享资源访问优化的同步机制，通过区分读/写操作实现&quot;读共享、写独占&quot;的访问模式。核心特性包括：允许多线程并发读取资源，但写操作时独占访问，确保数据一致性。相比互斥锁，读写锁在读取频繁、写入较少的场景（如缓存、配置读取）中显著提升并发性能。POSIX标准提供pthread_rwlock系列函数实现读写锁操作，使用时需注意写锁优先级和避免递归调用等问题。读写锁平衡了线程安全与性能，是处理高并发读取场景的理想选择。]]></description><category></category></item><item><title><![CDATA[*死锁（Deadlock）** 是指两个或多个线程（或进程）互相持有对方所需的资源，且都无法释放自己持有的资源]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/151144541</link><guid>https://blog.youkuaiyun.com/herderl/article/details/151144541</guid><author>herderl</author><pubDate>Wed, 03 Sep 2025 12:00:24 +0800</pubDate><description><![CDATA[摘要： 死锁是多线程/多进程编程中因循环等待资源导致的永久阻塞现象，需同时满足互斥、持有等待、不可剥夺和循环等待4个条件。典型场景如线程A持有锁1等锁2，线程B持有锁2等锁1。解决方法包括：按固定顺序获取资源、一次性申请所有资源、设置超时或使用共享资源。排查工具如ps、gdb可定位阻塞线程。预防关键在于设计时规避死锁条件，简化资源依赖关系。]]></description><category></category></item><item><title><![CDATA[原子操作（Atomic Operation） 是指不可被中断的操作——要么完整执行，要么完全不执行]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/151083107</link><guid>https://blog.youkuaiyun.com/herderl/article/details/151083107</guid><author>herderl</author><pubDate>Mon, 01 Sep 2025 21:06:04 +0800</pubDate><description><![CDATA[原子操作是多线程编程中轻量级的同步机制，通过硬件保证的不可分割性，高效解决简单共享变量的并发访问问题。与互斥锁相比，它性能更高但适用场景更窄，常作为底层同步原语（如实现锁、信号量）或优化简单计数场景。]]></description><category></category></item><item><title><![CDATA[互斥量（Mutex，全称 Mutual Exclusion）用于保证同一时间只有一个线程（或进程）访问共享资源，从而避免并发操作导致的数据不一致问题]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/151083049</link><guid>https://blog.youkuaiyun.com/herderl/article/details/151083049</guid><author>herderl</author><pubDate>Mon, 01 Sep 2025 21:04:00 +0800</pubDate><description><![CDATA[Linux中的互斥量（Mutex）是多线程/进程同步的核心机制，通过独占访问保证共享资源的安全操作。其核心特性包括互斥性、原子性、所有权和阻塞/非阻塞模式。主要使用POSIX线程库的pthread_mutex_t实现线程同步，通过初始化、加锁、解锁和销毁等操作保护临界区代码。互斥量也可用于进程间同步，需配合共享内存和PTHREAD_PROCESS_SHARED属性。相比信号量和读写锁，互斥量最适合&quot;单一执行者&quot;场景，是避免竞态条件的基础工具。合理使用互斥量对编写正确的并发程序至关重要。]]></description><category></category></item><item><title><![CDATA[线程同步是多线程编程中确保共享资源有序访问、避免并发冲突的关键机制]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150582863</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150582863</guid><author>herderl</author><pubDate>Thu, 21 Aug 2025 14:42:00 +0800</pubDate><description><![CDATA[线程同步是确保多线程程序正确访问共享资源的关键机制，主要解决竞态条件问题。常用方法包括：互斥锁（Mutex）实现独占访问；条件变量（Condition Variable）用于线程间通知；信号量（Semaphore）控制并发访问数量；读写锁（Read-Write Lock）优化读多写少场景。合理选择同步机制可兼顾线程安全和性能。]]></description><category></category></item><item><title><![CDATA[线程的**分离属性（Detached State）]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150582504</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150582504</guid><author>herderl</author><pubDate>Thu, 21 Aug 2025 14:29:52 +0800</pubDate><description><![CDATA[摘要： 线程的分离属性（Detached State）决定线程终止后资源的回收方式。分离线程自动释放资源，无需调用pthread_join，避免僵尸线程；非分离线程需手动回收。可通过pthread_attr_setdetachstate创建时设置，或运行中调用pthread_detach动态修改。分离线程不可逆且无法获取退出状态，适合后台任务。关键区别在于资源回收机制：分离线程适用于无需结果的场景（如日志、监控），而非分离线程需同步执行结果。注意主线程退出不影响分离线程运行，但错误调用pthread_joi]]></description><category></category></item><item><title><![CDATA[**僵尸进程（Zombie Process）** 和**孤儿进程（Orphan Process）**]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150485563</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150485563</guid><author>herderl</author><pubDate>Mon, 18 Aug 2025 10:37:17 +0800</pubDate><description><![CDATA[摘要： 僵尸进程与孤儿进程是操作系统中两种特殊进程状态。僵尸进程是子进程已终止但父进程未回收其资源（PCB残留），可能耗尽系统PID资源；孤儿进程是父进程先终止，子进程被Init进程收养，无直接危害。关键区别在于：僵尸进程的父进程存活但未处理子进程退出状态，而孤儿进程的父进程已终止。避免僵尸进程可通过父进程调用wait()或忽略SIGCHLD信号；避免孤儿进程需确保父进程晚于子进程退出。合理管理进程生命周期可预防这些问题。]]></description><category></category></item><item><title><![CDATA[线程（Thread）是进程内部的**独立执行单元**，是操作系统进行任务调度的最小单位]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150485311</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150485311</guid><author>herderl</author><pubDate>Mon, 18 Aug 2025 10:27:08 +0800</pubDate><description><![CDATA[摘要：线程是进程内部的独立执行单元，共享进程资源（内存、文件等）但拥有私有栈和寄存器。线程生命周期包括新建、就绪、运行、阻塞和终止状态。相比进程，线程更轻量级，创建/切换开销小，通信更高效，但需同步机制（如互斥锁）解决共享资源冲突。线程模型分为用户级、内核级和混合型，各具优势。多线程编程可提升并发性能，但也面临竞态条件、死锁等挑战。合理使用同步机制是保证线程安全的关键。]]></description><category></category></item><item><title><![CDATA[**守护进程（Daemon）** 是一种在后台运行的特殊进程]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150471490</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150471490</guid><author>herderl</author><pubDate>Sun, 17 Aug 2025 19:17:29 +0800</pubDate><description><![CDATA[Unix/Linux系统中的守护进程（Daemon）是在后台长期运行的特殊进程，独立于终端控制，为系统提供持续服务。其核心特性包括后台运行、脱离终端、生命周期长、无用户交互及由init/systemd接管。典型应用包括网络服务（nginx、sshd）、系统服务（crond）等。创建守护进程需完成&quot;守护化&quot;步骤：创建子进程并退出父进程、建立新会话、切换工作目录、重设文件权限掩码及关闭文件描述符。可通过systemctl或kill命令管理守护进程，其日志通常记录在/var/log/目录下。守]]></description><category></category></item><item><title><![CDATA[PV 操作（P 操作即等待，V 操作即释放）控制共享资源访问]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150347481</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150347481</guid><author>herderl</author><pubDate>Wed, 13 Aug 2025 17:00:10 +0800</pubDate><description><![CDATA[本文展示了使用System V信号灯实现PV操作控制共享内存访问的示例。代码通过定义P（等待）和V（释放）操作，实现了父子进程间的互斥访问：父进程（生产者）获取信号量写入数据后释放，子进程（消费者）等待信号量后读取数据。信号量初始值为1确保互斥性，生产者先执行P操作使信号量降为0以独占资源，完成后执行V操作唤醒消费者。该机制有效解决了并发读写的数据一致性问题，适用于生产者-消费者等同步场景。运行结果表明，PV操作能确保共享资源的顺序访问。]]></description><category></category></item><item><title><![CDATA[信号灯（Semaphore，也称为信号量）** 是一种用于**进程或线程同步与互斥**的机制]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150345649</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150345649</guid><author>herderl</author><pubDate>Wed, 13 Aug 2025 14:23:27 +0800</pubDate><description><![CDATA[在 Unix/Linux 系统中，是一种用于的机制，主要用于控制多个进程对共享资源（如共享内存、文件）的访问，避免因并发操作导致的数据不一致问题。与信号（Signal）不同，信号灯不用于传递事件通知，而是通过的方式协调多个进程的执行顺序。]]></description><category></category></item><item><title><![CDATA[信号（Signal）** 是一种进程间异步通信机制，用于通知进程发生发生了某种事件（如错误、用户中断等）]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150272405</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150272405</guid><author>herderl</author><pubDate>Tue, 12 Aug 2025 15:23:18 +0800</pubDate><description><![CDATA[Unix/Linux系统中的信号是进程间异步通信机制，用于通知进程特定事件（如中断、错误等）。信号具有异步性和事件驱动特性，可自定义处理方式或采用默认行为（终止、忽略等）。常见信号包括SIGINT（Ctrl+C）、SIGKILL（强制终止）等。通过signal()或更灵活的sigaction()函数可捕获信号并自定义处理逻辑。使用时需注意信号安全函数、可靠信号与不可靠信号的区别，以及SIGKILL/SIGSTOP的特殊性。信号机制广泛应用于进程控制、异常处理和用户交互等场景。]]></description><category></category></item><item><title><![CDATA[共享内存（Shared Memory）是一种高效的进程间通信（IPC）机制]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150268755</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150268755</guid><author>herderl</author><pubDate>Tue, 12 Aug 2025 15:13:05 +0800</pubDate><description><![CDATA[共享内存是最高效的进程间通信（IPC）机制，允许多个进程直接访问同一块物理内存，避免了数据拷贝。其核心特性包括：直接内存访问、无数据拷贝、需同步机制（如信号量）保证数据一致性，以及由内核管理的生命周期。Linux下通过shmget()创建、shmat()附加、shmdt()分离和shmctl()控制共享内存。使用时需注意同步问题、权限控制和资源清理。相比管道和消息队列，共享内存速度最快，适合高频/大数据量通信，但需要额外同步机制。典型应用包括实时视频处理和传感器数据共享等场景。]]></description><category></category></item><item><title><![CDATA[【无标题】消息队列（Message Queue）是一种**进程间通信（IPC）机制]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150155180</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150155180</guid><author>herderl</author><pubDate>Sun, 10 Aug 2025 19:52:52 +0800</pubDate><description><![CDATA[消息队列是一种进程间通信机制，支持结构化消息传输和异步通信。其核心特性包括：消息按类型标识结构化存储、发送和接收进程无需同步运行、消息持久化保存、支持多进程交互。本文以Linux的System V消息队列为例，详细介绍了创建队列(msgget)、发送消息(msgsnd)、接收消息(msgrcv)和控制队列(msgctl)等关键操作，并提供了完整的发送/接收示例代码。消息队列适用于复杂进程通信场景，但需注意消息大小限制、队列容量和资源释放问题。相比管道和共享内存等其他IPC机制，消息队列特别适合需要结构化数据]]></description><category></category></item><item><title><![CDATA[【无标题】命名管道（Named Pipe）是一种在操作系统中用于**进程间通信（IPC）** 的机制]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150154616</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150154616</guid><author>herderl</author><pubDate>Sun, 10 Aug 2025 19:33:00 +0800</pubDate><description><![CDATA[命名管道（Named Pipe）是一种进程间通信机制，通过文件系统路径实现不相关进程间的数据交换。与匿名管道不同，它在文件系统中以特殊文件形式存在（类型为p），支持双向通信和阻塞操作。可通过mkfifo命令或mkfifo()系统调用创建，使用文件操作函数进行读写。关键特性包括：文件系统可见性、跨进程通信能力、流式数据传输和权限控制。与匿名管道相比，命名管道支持无亲缘关系进程通信且持久存在，适用于命令行工具交互、服务程序通信等场景，是简单高效的IPC方案。]]></description><category></category></item><item><title><![CDATA[【无标题】无名管道]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150080522</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150080522</guid><author>herderl</author><pubDate>Fri, 08 Aug 2025 23:39:30 +0800</pubDate><description><![CDATA[无名管道（Unnamed Pipe，也称为匿名管道）是 Unix/Linux 系统中最基础的进程间通信（IPC）机制之一，用于在（如父子进程、兄弟进程）之间进行单向问数据传输。]]></description><category></category></item><item><title><![CDATA[IPC总结]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150080443</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150080443</guid><author>herderl</author><pubDate>Fri, 08 Aug 2025 23:36:49 +0800</pubDate><description><![CDATA[进程间通信（IPC）是操作系统提供的不同进程间传递数据和同步的机制。常见IPC方式包括：管道（单向通信）、命名管道（任意进程间）、信号（事件通知）、消息队列（异步通信）、共享内存（高速数据共享）、信号量（同步控制）和套接字（支持网络通信）。不同IPC机制在速度、适用场景和数据量限制方面各有特点，如管道适合简单通信，共享内存速度最快但需同步，套接字可跨网络。选择IPC方式需综合考虑通信需求、性能要求和适用范围。]]></description><category></category></item><item><title><![CDATA[进程间数据的关联与隔离]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150026028</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150026028</guid><author>herderl</author><pubDate>Thu, 07 Aug 2025 22:32:18 +0800</pubDate><description><![CDATA[进程控制涉及进程的生命周期管理及数据关联与隔离。进程控制块（PCB）存储进程关键信息，是实现进程管理的核心。父子进程通过fork()创建时，采用写时复制技术共享内存数据，但修改后相互独立，而文件描述符等资源则直接共享。进程终止时，PCB保留退出状态供父进程回收。特殊进程如僵尸进程和孤儿进程涉及不同数据残留与接管机制。进程间数据关系以隔离为主、按需共享，理解这些机制对设计多进程程序至关重要。]]></description><category></category></item><item><title><![CDATA[进程控制:进程的创建、终止、阻塞、唤醒、切换等生命周期管理操作]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/150025947</link><guid>https://blog.youkuaiyun.com/herderl/article/details/150025947</guid><author>herderl</author><pubDate>Thu, 07 Aug 2025 22:30:01 +0800</pubDate><description><![CDATA[本文介绍了Unix/Linux系统中的进程控制机制，重点讲解了进程创建、终止、等待等核心概念。通过fork()创建子进程，exec系列函数加载新程序，wait()/waitpid()回收子进程资源，以及exit()终止进程。文章还区分了僵尸进程和孤儿进程的特点及解决方法，并解释了进程标识符(PID)的作用。这些机制是操作系统实现多任务并发的基础，掌握进程控制对系统编程至关重要。]]></description><category></category></item><item><title><![CDATA[【无标题】进程]]></title><link>https://blog.youkuaiyun.com/herderl/article/details/149981558</link><guid>https://blog.youkuaiyun.com/herderl/article/details/149981558</guid><author>herderl</author><pubDate>Wed, 06 Aug 2025 21:34:17 +0800</pubDate><description><![CDATA[摘要：进程是操作系统资源分配和调度的基本单位，指程序的动态执行过程（如运行中的微信）。其核心特征包括动态性（生命周期）、独立性（隔离的内存空间）、并发性（多任务交替执行）和结构性（含程序代码、数据及进程控制块PCB）。进程经历创建、就绪、运行、阻塞和终止五种状态转换。与静态程序不同，进程是临时存在的动态实体，能并发执行并占用系统资源。通过进程隔离和调度，操作系统实现多任务并行与系统安全。简言之，进程是&quot;活着的程序&quot;，支撑现代计算机的多任务处理能力。（150字）]]></description><category></category></item></channel></rss>