自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 【无标题】读写锁(Read-Write Lock)

读写锁:高效解决"读多写少"并发问题 读写锁是一种针对共享资源访问优化的同步机制,通过区分读/写操作实现"读共享、写独占"的访问模式。核心特性包括:允许多线程并发读取资源,但写操作时独占访问,确保数据一致性。相比互斥锁,读写锁在读取频繁、写入较少的场景(如缓存、配置读取)中显著提升并发性能。POSIX标准提供pthread_rwlock系列函数实现读写锁操作,使用时需注意写锁优先级和避免递归调用等问题。读写锁平衡了线程安全与性能,是处理高并发读取场景的理想选择。

2025-09-03 13:11:34 536

原创 *死锁(Deadlock)** 是指两个或多个线程(或进程)互相持有对方所需的资源,且都无法释放自己持有的资源

摘要: 死锁是多线程/多进程编程中因循环等待资源导致的永久阻塞现象,需同时满足互斥、持有等待、不可剥夺和循环等待4个条件。典型场景如线程A持有锁1等锁2,线程B持有锁2等锁1。解决方法包括:按固定顺序获取资源、一次性申请所有资源、设置超时或使用共享资源。排查工具如ps、gdb可定位阻塞线程。预防关键在于设计时规避死锁条件,简化资源依赖关系。

2025-09-03 12:00:24 633

原创 原子操作(Atomic Operation) 是指不可被中断的操作——要么完整执行,要么完全不执行

原子操作是多线程编程中轻量级的同步机制,通过硬件保证的不可分割性,高效解决简单共享变量的并发访问问题。与互斥锁相比,它性能更高但适用场景更窄,常作为底层同步原语(如实现锁、信号量)或优化简单计数场景。

2025-09-01 21:06:04 1074

原创 互斥量(Mutex,全称 Mutual Exclusion)用于保证同一时间只有一个线程(或进程)访问共享资源,从而避免并发操作导致的数据不一致问题

Linux中的互斥量(Mutex)是多线程/进程同步的核心机制,通过独占访问保证共享资源的安全操作。其核心特性包括互斥性、原子性、所有权和阻塞/非阻塞模式。主要使用POSIX线程库的pthread_mutex_t实现线程同步,通过初始化、加锁、解锁和销毁等操作保护临界区代码。互斥量也可用于进程间同步,需配合共享内存和PTHREAD_PROCESS_SHARED属性。相比信号量和读写锁,互斥量最适合"单一执行者"场景,是避免竞态条件的基础工具。合理使用互斥量对编写正确的并发程序至关重要。

2025-09-01 21:04:00 1190

原创 线程同步是多线程编程中确保共享资源有序访问、避免并发冲突的关键机制

线程同步是确保多线程程序正确访问共享资源的关键机制,主要解决竞态条件问题。常用方法包括:互斥锁(Mutex)实现独占访问;条件变量(Condition Variable)用于线程间通知;信号量(Semaphore)控制并发访问数量;读写锁(Read-Write Lock)优化读多写少场景。合理选择同步机制可兼顾线程安全和性能。

2025-08-21 14:42:00 629

原创 线程的**分离属性(Detached State)

摘要: 线程的分离属性(Detached State)决定线程终止后资源的回收方式。分离线程自动释放资源,无需调用pthread_join,避免僵尸线程;非分离线程需手动回收。可通过pthread_attr_setdetachstate创建时设置,或运行中调用pthread_detach动态修改。分离线程不可逆且无法获取退出状态,适合后台任务。关键区别在于资源回收机制:分离线程适用于无需结果的场景(如日志、监控),而非分离线程需同步执行结果。注意主线程退出不影响分离线程运行,但错误调用pthread_joi

2025-08-21 14:29:52 539

原创 **僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**

摘要: 僵尸进程与孤儿进程是操作系统中两种特殊进程状态。僵尸进程是子进程已终止但父进程未回收其资源(PCB残留),可能耗尽系统PID资源;孤儿进程是父进程先终止,子进程被Init进程收养,无直接危害。关键区别在于:僵尸进程的父进程存活但未处理子进程退出状态,而孤儿进程的父进程已终止。避免僵尸进程可通过父进程调用wait()或忽略SIGCHLD信号;避免孤儿进程需确保父进程晚于子进程退出。合理管理进程生命周期可预防这些问题。

2025-08-18 10:37:17 605

原创 线程(Thread)是进程内部的**独立执行单元**,是操作系统进行任务调度的最小单位

摘要:线程是进程内部的独立执行单元,共享进程资源(内存、文件等)但拥有私有栈和寄存器。线程生命周期包括新建、就绪、运行、阻塞和终止状态。相比进程,线程更轻量级,创建/切换开销小,通信更高效,但需同步机制(如互斥锁)解决共享资源冲突。线程模型分为用户级、内核级和混合型,各具优势。多线程编程可提升并发性能,但也面临竞态条件、死锁等挑战。合理使用同步机制是保证线程安全的关键。

2025-08-18 10:27:08 469

原创 **守护进程(Daemon)** 是一种在后台运行的特殊进程

Unix/Linux系统中的守护进程(Daemon)是在后台长期运行的特殊进程,独立于终端控制,为系统提供持续服务。其核心特性包括后台运行、脱离终端、生命周期长、无用户交互及由init/systemd接管。典型应用包括网络服务(nginx、sshd)、系统服务(crond)等。创建守护进程需完成"守护化"步骤:创建子进程并退出父进程、建立新会话、切换工作目录、重设文件权限掩码及关闭文件描述符。可通过systemctl或kill命令管理守护进程,其日志通常记录在/var/log/目录下。守

2025-08-17 19:17:29 719

原创 PV 操作(P 操作即等待,V 操作即释放)控制共享资源访问

本文展示了使用System V信号灯实现PV操作控制共享内存访问的示例。代码通过定义P(等待)和V(释放)操作,实现了父子进程间的互斥访问:父进程(生产者)获取信号量写入数据后释放,子进程(消费者)等待信号量后读取数据。信号量初始值为1确保互斥性,生产者先执行P操作使信号量降为0以独占资源,完成后执行V操作唤醒消费者。该机制有效解决了并发读写的数据一致性问题,适用于生产者-消费者等同步场景。运行结果表明,PV操作能确保共享资源的顺序访问。

2025-08-13 17:00:10 512

原创 信号灯(Semaphore,也称为信号量)** 是一种用于**进程或线程同步与互斥**的机制

在 Unix/Linux 系统中,是一种用于的机制,主要用于控制多个进程对共享资源(如共享内存、文件)的访问,避免因并发操作导致的数据不一致问题。与信号(Signal)不同,信号灯不用于传递事件通知,而是通过的方式协调多个进程的执行顺序。

2025-08-13 14:23:27 726

原创 信号(Signal)** 是一种进程间异步通信机制,用于通知进程发生发生了某种事件(如错误、用户中断等)

Unix/Linux系统中的信号是进程间异步通信机制,用于通知进程特定事件(如中断、错误等)。信号具有异步性和事件驱动特性,可自定义处理方式或采用默认行为(终止、忽略等)。常见信号包括SIGINT(Ctrl+C)、SIGKILL(强制终止)等。通过signal()或更灵活的sigaction()函数可捕获信号并自定义处理逻辑。使用时需注意信号安全函数、可靠信号与不可靠信号的区别,以及SIGKILL/SIGSTOP的特殊性。信号机制广泛应用于进程控制、异常处理和用户交互等场景。

2025-08-12 15:23:18 969

原创 共享内存(Shared Memory)是一种高效的进程间通信(IPC)机制

共享内存是最高效的进程间通信(IPC)机制,允许多个进程直接访问同一块物理内存,避免了数据拷贝。其核心特性包括:直接内存访问、无数据拷贝、需同步机制(如信号量)保证数据一致性,以及由内核管理的生命周期。Linux下通过shmget()创建、shmat()附加、shmdt()分离和shmctl()控制共享内存。使用时需注意同步问题、权限控制和资源清理。相比管道和消息队列,共享内存速度最快,适合高频/大数据量通信,但需要额外同步机制。典型应用包括实时视频处理和传感器数据共享等场景。

2025-08-12 15:13:05 1031

原创 【无标题】消息队列(Message Queue)是一种**进程间通信(IPC)机制

消息队列是一种进程间通信机制,支持结构化消息传输和异步通信。其核心特性包括:消息按类型标识结构化存储、发送和接收进程无需同步运行、消息持久化保存、支持多进程交互。本文以Linux的System V消息队列为例,详细介绍了创建队列(msgget)、发送消息(msgsnd)、接收消息(msgrcv)和控制队列(msgctl)等关键操作,并提供了完整的发送/接收示例代码。消息队列适用于复杂进程通信场景,但需注意消息大小限制、队列容量和资源释放问题。相比管道和共享内存等其他IPC机制,消息队列特别适合需要结构化数据

2025-08-10 19:52:52 1167

原创 【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制

命名管道(Named Pipe)是一种进程间通信机制,通过文件系统路径实现不相关进程间的数据交换。与匿名管道不同,它在文件系统中以特殊文件形式存在(类型为p),支持双向通信和阻塞操作。可通过mkfifo命令或mkfifo()系统调用创建,使用文件操作函数进行读写。关键特性包括:文件系统可见性、跨进程通信能力、流式数据传输和权限控制。与匿名管道相比,命名管道支持无亲缘关系进程通信且持久存在,适用于命令行工具交互、服务程序通信等场景,是简单高效的IPC方案。

2025-08-10 19:33:00 858

原创 【无标题】无名管道

无名管道(Unnamed Pipe,也称为匿名管道)是 Unix/Linux 系统中最基础的进程间通信(IPC)机制之一,用于在(如父子进程、兄弟进程)之间进行单向问数据传输。

2025-08-08 23:39:30 525

原创 IPC总结

进程间通信(IPC)是操作系统提供的不同进程间传递数据和同步的机制。常见IPC方式包括:管道(单向通信)、命名管道(任意进程间)、信号(事件通知)、消息队列(异步通信)、共享内存(高速数据共享)、信号量(同步控制)和套接字(支持网络通信)。不同IPC机制在速度、适用场景和数据量限制方面各有特点,如管道适合简单通信,共享内存速度最快但需同步,套接字可跨网络。选择IPC方式需综合考虑通信需求、性能要求和适用范围。

2025-08-08 23:36:49 1465

原创 进程间数据的关联与隔离

进程控制涉及进程的生命周期管理及数据关联与隔离。进程控制块(PCB)存储进程关键信息,是实现进程管理的核心。父子进程通过fork()创建时,采用写时复制技术共享内存数据,但修改后相互独立,而文件描述符等资源则直接共享。进程终止时,PCB保留退出状态供父进程回收。特殊进程如僵尸进程和孤儿进程涉及不同数据残留与接管机制。进程间数据关系以隔离为主、按需共享,理解这些机制对设计多进程程序至关重要。

2025-08-07 22:32:18 695

原创 进程控制:进程的创建、终止、阻塞、唤醒、切换等生命周期管理操作

本文介绍了Unix/Linux系统中的进程控制机制,重点讲解了进程创建、终止、等待等核心概念。通过fork()创建子进程,exec系列函数加载新程序,wait()/waitpid()回收子进程资源,以及exit()终止进程。文章还区分了僵尸进程和孤儿进程的特点及解决方法,并解释了进程标识符(PID)的作用。这些机制是操作系统实现多任务并发的基础,掌握进程控制对系统编程至关重要。

2025-08-07 22:30:01 646

原创 【无标题】进程

摘要:进程是操作系统资源分配和调度的基本单位,指程序的动态执行过程(如运行中的微信)。其核心特征包括动态性(生命周期)、独立性(隔离的内存空间)、并发性(多任务交替执行)和结构性(含程序代码、数据及进程控制块PCB)。进程经历创建、就绪、运行、阻塞和终止五种状态转换。与静态程序不同,进程是临时存在的动态实体,能并发执行并占用系统资源。通过进程隔离和调度,操作系统实现多任务并行与系统安全。简言之,进程是"活着的程序",支撑现代计算机的多任务处理能力。(150字)

2025-08-06 21:34:17 352

原创 【无标题】Linux中静态库和动态库

在 Linux 中,静态库(Static Library)和动态库(Dynamic Library,又称共享库 Shared Library)是两种不同的代码复用方式,用于将可重用代码打包供其他程序使用,核心区别在于链接时机和代码加载方式。

2025-08-06 12:26:01 717

原创 【无标题】标准 I/O 中的一些函数,按功能分类说明其用法和特点

类别函数组核心特点文件控制fopen()fclose()打开/关闭文件,获取文件流指针数据块读写fread()fwrite()适合二进制文件,按固定大小块操作格式化 I/Oprintfscanf等支持格式控制,适合文本的结构化读写字符操作fgetc()fputc()逐个字符读写,灵活但效率较低行操作fgets()fputs()按行读写文本,自动处理换行符操作完成后必须用fclose()关闭文件(自动刷新缓冲区)文本文件建议用格式化/行操作函数,二进制文件建议用fread()

2025-08-04 22:31:31 786

原创 【无标题】文件IO与标准IO的区别

直接调用操作系统提供的底层接口(属于内核函数),属于。open()close()read()write()lseek()等。这些函数由操作系统内核实现,直接与文件系统交互。基于 C 标准库实现,属于。fopen()fclose()fread()fwrite()fgets()fputs()等。这些函数内部最终会调用文件 I/O 的系统调用,但增加了缓冲机制和格式化处理。

2025-08-04 22:24:09 879

原创 【无标题】Linux文件操作深度解析:从创建到读写的核心函数与实战代码

本文深入解析Linux文件操作的核心函数与实现机制,从文件描述符、创建/打开文件(open)、读写操作(read/write)到文件定位(lseek)和错误处理。通过代码示例展示文件操作全流程,包括创建新文件、读写数据、获取文件大小等常见操作。文章还提供性能优化建议,如缓冲区大小选择和直接I/O,最后给出一个完整的文件复制工具实现案例,涵盖权限保持、错误处理等关键细节。这些底层文件操作是Linux系统编程的基础,掌握它们对开发高效可靠的应用程序至关重要。

2025-08-03 16:57:01 705

原创 Linux文件操作命令详解:从入门到实战

本文详细介绍了Linux系统中10个最常用的文件操作命令,包括ls(目录查看)、cd(目录切换)、pwd(显示路径)、mkdir(创建目录)、rm(删除)、cp(复制)、mv(移动/重命名)、touch(创建文件)、cat(查看内容)和grep(文件搜索)。每个命令都配有具体代码示例,展示其基本用法和常用选项。这些命令是Linux文件管理的基础,熟练掌握后能有效提升工作效率。文章建议读者在实际环境中多加练习,并善用man命令获取详细帮助文档。

2025-08-03 16:45:48 437

原创 FreeRTOS列表系统深度解析

FreeRTOS列表系统采用双向链表管理任务,核心数据结构包括列表控制块(List_t)、列表项(ListItem_t)和迷你列表项(MiniListItem_t)。列表初始化时创建环形结构,有序插入算法通过遍历实现O(n)时间复杂度排序,移除操作为O(1)。系统级应用中,就绪列表按优先级数组管理,延时列表按唤醒时间排序,配合优先级位图算法快速定位最高优先级任务。该设计通过哨兵节点、遍历指针优化和位图技术,实现了高效的任务调度管理。

2025-08-02 18:39:23 351

原创 FreeRTOS中断核心知识点全集

本文总结了FreeRTOS中断处理的核心知识点,包括中断基础机制、关键API、任务通信方式及优化策略。重点介绍了中断优先级配置、安全通信方法(如队列和信号量)、中断延迟管理和常见错误防范措施,并提供了调试诊断方法。文章还包含关键代码示例和配置建议,适用于实时系统开发中的中断处理优化。

2025-08-01 23:45:25 739

原创 [特殊字符] FreeRTOS任务管理艺术:创建、挂起与恢复的精密舞步 [特殊字符]

FreeRTOS任务管理精要:创建、挂起与恢复技术 本文深入探讨FreeRTOS实时操作系统中的任务管理核心技术,包括任务创建、挂起与恢复等关键操作。文章首先通过状态转换图解析任务的完整生命周期,详细剖析任务控制块(TCB)的结构与功能。在任务创建部分,对比分析了动态与静态两种创建方式的特点及适用场景,并给出多传感器采集系统的实现示例。针对任务挂起操作,介绍了三种不同的挂起函数及其应用场景,展示了低功耗模式下的实际应用。任务恢复章节则着重讲解从中断上下文恢复任务的注意事项和安全机制。最后,文章通过智能家居控

2025-07-31 11:21:24 361

原创 【无标题】[特殊字符] STM32 SPI通信指南:从协议原理到库函数深度实战

本文深入解析SPI通信协议及其在STM32上的应用实践。首先剖析SPI四线制物理层结构和四种工作模式,重点说明时钟极性与相位的组合特性。随后详细讲解STM32标准外设库的SPI初始化流程和关键API,提供安全收发代码模板。实战部分通过W25Q Flash芯片案例,展示页编程、扇区擦除等操作的具体实现。最后介绍DMA+定时器的高级优化技巧,可提升5倍以上传输效率。全文贯穿嵌入式开发的核心要点,为SPI通信应用提供从理论到实践的完整指导。

2025-07-27 22:28:51 1071

原创 ## 51单片机IO与定时器:奏响精准控制的“数字交响乐” [特殊字符]✨

IO口编织空间维度- 控制物理世界的灯、屏、电机、传感器定时器构筑时间维度- 赋予系统精确的心跳节律当二者深度融合,单片机从简单的微控制器蜕变为精准的时空建筑师。无论是毫秒级响应的工业控制系统,还是微妙级精度的通信协议,都建立在这两大基石之上。终极挑战四方向红绿灯控制(使用P0-P3)倒计时数码管显示(定时器控制刷新)紧急车辆优先通行模式(外部中断触发)期待在评论区看到您的创意实现!技术标签#51单片机高级应用#定时器原理剖析#IO口驱动设计#PWM控制技术#中断系统精解。

2025-07-23 16:14:54 1092

原创 指针沉思录:在内存的宇宙中寻找编程的真谛

在C语言的星辰大海中,指针是最深邃的黑洞,也是最耀眼的恒星。它不只是一门语法,而是一种思维方式——一种直抵计算机灵魂的哲学。当你真正理解指针,就获得了与机器对话的能力。本文将带你穿越指针的迷雾,探索那些教科书不会告诉你的内存奥秘。

2025-07-15 22:32:04 1044

原创 【无标题】定时器stm32

系统定时器是一个 24bit 的向下 递减 的计数器, 计数器每计数一次的时间为 1 / SYSCLK , 一般我们设置系统时钟 SYSCLK (与 AHB 相同)等于 72M。当重装载数值寄存 器的值递减到 0 的时候, 系统定时器就产生一次中断, 以此循环往复。它使操作系统和其它系统软件在 CM3 器件间的移植变得简单多了, 因为在所有 CM3 产品间 SysTick 的处理方式都是相同的。uwTick是一个全局变量,每1ms中断一次,每产生一次中断就加1,所以这个变量表示的计时的ms值。

2024-10-15 22:16:39 533

原创 I2C通讯

2. 硬件电路设计 :STM32 有专门负责协议的 I 2 C 外设, 只要配置好该外设, 它就会自动根据协议要 求产生通讯信号, 收发数据并缓存起来, CPU 只要检测该外设的状态和访问数据寄存器, 就能完成数据收发。I 2 C 通讯协议( Inter-Integrated Circuit ) 是由 Phiilps 公司开发的, 由于它引脚少, 硬件 实现简单, 可扩展性强, 不需要 USART 、 CAN 等通讯协议的外部收发设备, 现在被广泛 地使用在系统内多个集成电路( IC ) 间的通讯。

2024-10-11 09:24:58 943

原创 【无标题】USAR串口通讯——pro

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。​​。

2024-10-10 20:05:54 1409

原创 USART串口通讯

如果使能CTS流控制,发送器在发送下一帧数据之前会检测nCTS引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或8位长。在二进制的世界码元和位是等价的。数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。是给外设的时钟(usart1在APB2上一般是72MHz,usart2,3,4,5在APB1上一般为36MHz)。

2024-10-09 14:36:07 747

原创 【无标题】STM32 的中断系统

比如我们要检测按键是否按下, 如果没有中断, 则需要循环的方式不断的去检测按键 对应的 IO 口的电平, 这是比较耗费 CPU 的时间的。正在执行中断程序的时候, 这个时候有可能被另外一个中断源给中断, CPU 转而去执 行另外一个中断源的中断处理程序, 这叫中断嵌套。中断 B 能否打断中断 A , 要看他们的优先级, 优先级高的可以打断优先级低的, 优先 级低的无法打断优先级高的。中断源可以是外部的, 也可以是内部的。外部的叫外部中断源, 内部的叫内部中断源 ( 内部的中断有时候也叫异常)。

2024-10-09 09:04:15 1662 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除