- 博客(25)
- 收藏
- 关注
原创 从零掌握Linux消息队列:原理详解与实战指南
从零掌握Linux消息队列:原理详解与实战指南。二、密钥生成:ftok函数深度解析。3.1 创建队列:msgget。3.2 发送消息:msgsnd。3.3 接收消息:msgrcv。3.4 队列管理:msgctl。四、实战:实现跨进程日志系统。6.1 其他IPC方式对比。一、为什么需要消息队列?1.1 进程间通信的挑战。1.2 消息队列的优势。2.1 函数原型与参数。三、消息队列核心操作。4.2 日志消息格式。4.3 关键实现代码。5.2 常见错误处理。
2025-04-06 16:49:58
804
原创 Linux信号处理解析:从入门到实战
2 | SIGINT | Ctrl+C | 终止进程 || 1 | SIGHUP | 终端断开 | 终止进程 || 15 | SIGTERM | 默认终止信号 | 优雅终止 || 僵尸进程堆积 | SIGCHLD+wait组合拳 |
2025-04-04 18:57:39
941
原创 内存映射与共享内存完全指南:从入门到实战
首次写入 | 15μs | 8μs || 修改10万次 | 110ms | 85ms || 相邻进程读取 | 22μs | 3μs || 操作 | mmap耗时 | 共享内存耗时 |三、System V共享内存实战:跨进程聊天室。(动态图示:文件内容如何映射到内存空间)四、mmap vs 共享内存:如何选择?(图示:两个进程通过共享内存通信)步骤2:进程A写入数据。
2025-04-02 20:01:57
1118
原创 Linux进程间通信:无名管道与有名管道的原理与实践
在多任务操作系统中,进程间通信(IPC)是实现协作的核心机制。三、有名管道(Named Pipe / FIFO):跨进程的公共通道。管道的本质:一种基于文件描述符的通信方式,实现数据流动的“桥梁”。二、无名管道(Anonymous Pipe):父子进程的私有通道。核心分类:无名管道(匿名管道)与有名管道(命名管道)。一、引言:为什么需要进程间通信(IPC)?四、无名管道 vs 有名管道:对比与选型。代码示例:父子进程通信。代码示例:双向通信实现。五、常见问题与调试技巧。非阻塞模式下的竞态条件。
2025-04-01 20:37:03
798
原创 多线程编程:线程池
线程池作为并发编程的基石技术,其设计需要在 资源效率、响应速度 和 系统稳定性 之间寻找平衡点。在传统多线程编程中,每次任务处理都需要经历 线程创建→任务执行→线程销毁 的完整生命周期。线程池的核心价值:通过 线程复用 和 任务队列缓冲,将系统资源利用率提升30%~70%(根据Intel实验数据)。三、代码深度解析(基于C/pthread实现)一、引言:为什么需要线程池?二、线程池的四大核心组件。五、应用场景与选型建议。四、线程池的进阶特性。
2025-03-31 17:04:26
1232
原创 多线程编程:条件变量
在多线程编程中,条件变量(Condition Variable) 是解决线程间同步与通信的核心工具之一。它允许线程在特定条件不满足时主动挂起,并在条件满足时被唤醒,从而避免了忙等待(Busy Waiting)带来的资源浪费。本文将从条件变量的初始化、核心函数原理、使用陷阱以及实际代码示例展开,深入解析这一机制的最佳实践。优点:无需手动销毁,程序退出时自动释放资源。四、代码示例解析:生产者-消费者模型。一、条件变量的初始化:静态与动态。三、条件变量的使用陷阱与解决方案。二、条件变量的核心操作。
2025-03-28 17:14:48
977
原创 POSIX 线程取消与资源清理完全指南
在多线程编程中,优雅地终止线程并确保资源释放是开发者面临的重要挑战。直接终止线程可能导致内存泄漏、文件未关闭等问题。POSIX 线程库提供了一套完整的线程取消和清理机制,本文将深入解析这些关键API的使用方法。
2025-03-27 19:50:29
544
原创 多线程编程:线程私有与共享资源解析及线程操作函数详解
共享资源必须同步使用互斥锁、信号量或原子操作保护临界区。优先使用线程局部存储(TLS)替代全局变量以减少竞争。谨慎传递参数动态分配内存或复制数据避免悬垂指针。及时回收资源调用或设置分离属性防止资源泄漏。附录:完整代码示例5// 线程函数:动态分配参数内存free(arg);// 释放参数内存// 模拟任务执行// 返回结果// 创建线程并传递参数i++) {*arg = i;// 等待线程结束并收集结果i++) {
2025-03-26 16:32:29
1245
原创 深入理解 Linux 进程管理:进程组、会话、守护进程与关键系统调用
在 Linux 中,进程组是由一个父进程及其所有子进程组成的集合。每个进程组有一个唯一的进程组 ID(PGID),它通常与进程组长(组长进程,即父进程)的进程 ID(PID)相同。进程组为一组相关的进程提供了一个统一的管理单元。会话是多个进程组的集合,通常由一个用户登录后启动的所有进程组成。每个会话有一个唯一的会话 ID(SID),通常与会话首进程(例如,登录进程)的 PID 相同。会话的作用是方便管理和组织用户在登录期间启动的所有进程。控制终端是与会话关联的终端设备,用于输入输出。
2025-03-25 10:46:03
1162
原创 深入了解 Linux 的 exec 函数族与 system 函数
exec函数族包括execlexecvexecleexecpexecvpexecve等多个函数。所有这些函数的共同特点是:一旦执行成功,当前进程将被新程序替换,而不再返回原进程中。常见的exec。
2025-03-25 10:41:43
973
原创 Linux系统中的进程基础
在Linux中,我们通常会涉及进程的创建、管理、优先级调整以及进程间的通信。本文将深入讲解Linux中的进程组成、管理、调度命令以及如何控制进程的优先级和状态。交互式进程是与用户直接交互的进程。这类进程需要快速响应用户的输入,通常具有较高的优先级,且执行时间较短。Linux允许将进程分为前台进程和后台进程,前台进程占用终端输入和输出,而后台进程则在后台运行。每个进程在操作系统中都有一个唯一的标识符—进程ID(PID)。在Linux中,进程的优先级控制其调度的顺序,使用。命令用于修改已经运行进程的优先级。
2025-03-24 11:27:52
904
原创 Linux软件包管理(apt,dpkg等工具的使用)
软件包是将应用程序、配置文件、依赖关系等打包在一起的归档文件。在 Debian/Ubuntu 系统中,软件包通常是.deb格式。
2025-03-17 10:38:31
289
原创 Makefile(一文读懂)
定义变量$@: 当前目标$<: 第一个依赖文件$^: 所有依赖文件$*: 匹配符 % 匹配的部分$(@D): 目标文件的目录部分$(@F): 目标文件的文件部分。
2025-03-16 14:40:35
797
1
原创 GDB调试
在使用GDB调试之前,需要确保程序在编译时包含了调试信息。如果程序同时涉及多进程和多线程,可以结合上述方法。GDB 可以调试多线程程序,使用。命令可以对所有线程执行相同命令。
2025-03-14 10:21:55
262
1
原创 vi编辑器
进入编辑器过后输入i进入写模式,esc退出写模式。输入v模式进入可读行模式,esc退出该模式。:wq保存并推出, :q!用vi编辑器打开目标文件。
2025-03-11 11:29:24
132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人