- 博客(34)
- 收藏
- 关注
原创 线程同步机制总结
条件变量机制作用与特点• 用于线程间同步,允许线程以无竞争方式等待特定条件的发生,避免忙等待(轮询)造成的CPU资源浪费。• 需与互斥锁()配合使用,确保对共享条件的检查在互斥锁保护下进行。• 条件变量本身不保存状态信息,仅提供阻塞和唤醒机制。核心操作流程初始化等待条件◦ 调用▪ 自动释放互斥锁mutex,线程进入阻塞等待状态。▪ 被唤醒后重新获取mutex锁,需再次检查条件是否满足(防止虚假唤醒)。通知条件◦:唤醒至少一个等待线程。◦:唤醒所有等待线程。销毁。
2025-04-10 19:24:02
386
原创 多线程中的互斥与同步
互斥锁用于控制对共享资源的访问,确保在同一时刻只有一个线程能够访问资源。互斥锁有两种状态:上锁(锁定)和解锁(释放)。如果其他线程尝试上锁已被占用的互斥锁,它将被挂起,直到锁被释放。读写锁适用于多读少写的场景。它允许多个线程并发读取共享资源,但写入时必须独占资源,避免数据冲突。
2025-04-10 19:15:46
214
原创 多线程编程:提高程序效率与响应性
线程是进程中的一个执行单元,每个进程至少有一个线程,称为主线程。多线程编程是指在一个程序中创建多个线程,这些线程可以并发执行不同的任务。与进程相比,线程共享进程的资源,如内存和文件描述符,因此线程间的通信比进程间通信更为高效。多线程编程通过让一个程序同时执行多个任务,显著提高了程序的效率和响应性。线程与进程相比,具有更小的开销和更高效的资源共享机制。掌握多线程编程的基本操作和常见函数,可以帮助开发者在多任务处理、后台服务和并行计算等场景中充分利用多核处理器的性能。
2025-04-08 20:22:55
963
原创 System V 信号量:控制进程间共享资源的访问
System V 信号量是一种用于进程同步的机制。它允许多个进程在共享资源时,利用信号量来协调访问。信号量通常以整数形式存在,通过两个操作——P 操作和V 操作P 操作(Proberen,尝试):减少信号量的值,如果信号量的值大于或等于零,进程可以继续执行。如果信号量值小于零,进程将被阻塞,直到信号量的值变得大于或等于零。V 操作(Verhogen,增加):增加信号量的值,如果增加后的值大于或等于零,进程继续执行;如果增加后的值小于零,进程将被阻塞。
2025-04-08 20:15:26
541
原创 Linux 进程间通信:信号机制
信号是一种进程间通信的方式,用于向进程传递异步事件。在Linux中,信号最初设计为软中断,其作用类似于硬件中断,可以中断当前进程的执行,转而处理特定的事件。忽略信号:不做任何处理。默认处理:操作系统定义的默认响应,例如,进程被终止或暂停。捕捉信号:进程定义的自定义处理函数,当信号到达时,进程会中断当前任务,转而执行指定的处理程序。信号是Linux系统中实现进程间通信的一种重要机制,它能够让进程处理突发的异步事件。虽然信号机制具有一定的复杂性和限制,但它在很多场景下仍然是非常有效的进程控制工具。
2025-04-08 20:11:38
585
原创 进程间通讯(IPC)
进程间通讯是指两个或多个进程之间交换信息的机制。每个进程在系统中都是独立的资源管理单元,它们之间的资源是相互隔离的。尽管如此,进程之间仍然需要进行数据传输、同步或其他形式的消息交换,因此进程间通讯机制应运而生。在Linux中,进程间通讯是一个至关重要的功能,它使得多个进程能够协同工作,共享数据和资源。不同的IPC方式各有优缺点,开发者可以根据实际需求选择合适的通讯机制。无论是简单的管道,还是更复杂的共享内存和消息队列,IPC都为Linux系统提供了强大的进程间协作能力。
2025-04-08 20:09:02
922
原创 Linux进程与进程控制学习总结
通过掌握进程控制函数,能够编写高效的多进程程序,充分利用系统资源。实现一个简单的Shell,执行用户输入的命令。:创建子进程并区分父子进程逻辑。:父进程等待子进程结束。
2025-03-20 19:10:21
256
原创 Linux目录操作学习总结
通过结合目录操作函数和文件属性查询,可实现复杂的文件系统管理功能。的功能,输出目录下文件的详细信息(名称、类型、inode号)。
2025-03-20 19:05:10
369
原创 数据结构学习总结
本总结覆盖数据结构核心内容,建议结合算法题实践(如LeetCode)深入理解不同结构的应用场景。:实现LRU缓存(哈希表+双向链表):二叉树的中序遍历(递归实现):删除有序数组中的重复项。:LIFO(后进先出):FIFO(先进先出):两数之和(哈希优化)
2025-03-10 19:21:31
331
原创 C语言二叉树学习笔记
树:一种非线性数据结构,由节点和边组成,模拟分层关系。核心术语根节点:树的顶层节点(唯一)。子节点/双亲节点:一个节点的直接下层节点称为子节点,该节点称为子节点的双亲节点。叶子节点:没有子节点的节点。节点的度:节点的子节点数量。树的深度/高度:树中节点的最大层次(根节点为第1层)。二叉树:每个节点最多有2个子节点(左子节点和右子节点)。特点子树有明确的左右之分。可以为空树(没有节点)。性质左子树所有节点的值 < 根节点的值。右子树所有节点的值 > 根节点的值。
2025-02-26 11:14:53
550
原创 C语言链表学习笔记
动态数据结构:链表长度可在程序运行时动态调整组成要素头指针:指向第一个节点的地址节点= 数据域 + 指针域数据域:存储实际数据指针域:存储下一个节点的地址DATA data;// 数据域(DATA需提前定义)// 指针域。
2025-02-24 14:25:36
292
原创 进制转换及C语言中进制转换方法
0.25 × 2 &= 0.5 \quad \ \ \text{取整} \ 0 \。0.5 × 2 &= 1.0 \quad \ \ \text{取整} \ 1 \。12 ÷ 2 &= 6 \ \ \ \text{余} \ 0 \。6 ÷ 2 &= 3 \ \ \ \text{余} \ 0 \。3 ÷ 2 &= 1 \ \ \ \text{余} \ 1 \。1 ÷ 2 &= 0 \ \ \ \text{余} \ 1 \。25 ÷ 2 &= 12 \ \text{余} \ 1 \。
2025-02-20 19:33:59
920
原创 C语言预处理学习笔记
define 宏名 替换文本宏定义:简化代码,分为不带参数和带参数两种。文件包含:通过#include实现代码复用。条件编译:根据条件选择性地编译代码。注意事项宏替换是文本替换,注意括号和运算符优先级。使用条件编译避免头文件重复包含。练习题定义一个宏,打印整数n的值。使用条件编译实现:当DEBUG宏定义时打印调试信息,否则不打印。
2025-02-20 10:58:16
560
原创 八大经典排序算法
完整代码实现建议在本地IDE中测试运行,理解算法原理后尝试手写实现。:通过相邻元素比较交换,使最大元素"浮"到末尾。:每次选择最小元素放到已排序序列末尾。:将未排序元素插入已排序序列合适位置。:分治法,先拆分再合并有序子序列。:分组插入排序,逐步缩小间隔。:气泡从水底逐渐上浮的过程。:选取基准值进行分区排序。:利用堆结构进行选择排序。:整数排序,数据范围较小。
2025-02-18 20:14:09
1274
原创 C语言文件操作学习笔记
文件:存储在外部存储器(如硬盘)上的数据集合。输入输出流:数据像流水一样从一处流向另一处,C语言将文件视为字符(字节)序列。文件操作步骤:打开 → 操作 → 关闭。打开模式"r""w""a"等需根据需求选择。顺序读写:逐个字符或字符串处理。随机读写:通过fseek定位指针,直接访问任意位置。二进制文件:适合存储结构体等复杂数据。
2025-02-18 14:02:08
800
原创 C语言结构体学习笔记
结构体:一种用户自定义的数据类型,用于将多个不同类型的变量组合成一个整体。用途:表示复杂数据(如学生信息:学号、姓名、成绩等)。struct 结构体名 {数据类型 成员1;数据类型 成员2;// 可以嵌套结构体struct 子结构体名 子成员;先声明类型,后定义变量声明类型时直接定义变量int num;匿名结构体(无法重复使用)struct {int num;{101, "张三", 90.5},{102, "李四", 88.0},{103, "王五", 95.5}
2025-02-17 09:12:27
735
原创 微信小程序学习笔记
区别网页开发小程序开发运行环境浏览器环境微信环境开发模式浏览器 + 代码编辑器需申请账号、安装开发者工具API支持 DOM/BOM API仅支持微信 API(如扫码、支付)定义:小程序运行依赖的微信环境。能力:提供组件、API、通信模型等。创建项目:注册账号 → 安装工具 → 获取 AppID。代码结构pages目录。页面组成.wxml(结构)、.wxss(样式)、.json(配置)、.js(逻辑)。组件使用viewtextimage等。协同发布。
2025-02-16 23:09:31
764
原创 C语言数组学习笔记
语法类型说明符 数组名[常量表达式];示例int a[10];定义了一个包含10个整型元素的数组a。语法类型说明符 数组名[常量表达式1][常量表达式2];示例定义了一个3行4列的二维数组a。语法char 数组名[常量表达式];示例定义了一个包含10个字符的字符数组str。
2025-02-10 23:04:21
423
原创 C语言函数学习笔记
定义原因:方便使用他人代码、复用自己代码、实现结构化程序设计。分类从用户角度:分为标准库函数(如scanf()printf())和用户自定义函数。从函数形式:分为无参函数(主调函数不向被调函数传数据,一般不返回值)和有参函数(主调函数通过参数传数据,一般有返回值)。一般形式函数头:包括类型标识符(指定返回值类型,void表示无返回值)、函数名(有效标识符)和参数表(声明参数,多个参数用逗号分隔,需指定数据类型)。函数体:包含实现函数功能的语句。不同类型函数定义无参函数类型标识符 函数名()
2025-02-10 22:50:28
638
原创 C语言指针学习笔记
数据类型 *指针变量名;// 如 int *p;注意:指针的基类型必须与指向变量的类型一致。a : b;// 定义函数指针// 输出5。
2025-02-10 22:34:09
536
原创 C语言循环练习题2
输入钱数,计算找零(找零时优先找回面额大的钞票),找零方式为各种面额张数,可识别面额:100,50,20,10,5,1。出租车费计算程序,起步公里数3公里,车费8元,超出3公里,每公里1.8元,不足一公里,按照1公里计算。输入站数,计算费用,计费规则,6站2元,7-10站3元,11站以上为4元。如果bmi在18.5和23.9之间,则显示“体重指数良好,注意保持”7.实现一个简单的计算器,要求根据输入的运算符实现相应的运算。如果输入一个钱数,计算最多能做多少公里,该如何实现?
2025-01-16 20:35:45
507
原创 C语言循环练习题1
3、给出租车做一计费软件。输入公里数,输出乘车费用。起步3KM,10元,以后每公里2元。不足一公里按一公里算。1、通过键盘输入一个年份,判断是不是闰年,是显示“是闰年”,否则显示“不是闰年”2、一瓶矿泉水500ml,输入水的体积,计算能装多少瓶?4、输入两个数,求最大值。5、输入三个数,求最大值。
2025-01-16 20:30:56
213
原创 C语言三大结构
各操作是按先后顺序执行的。是最简单的一种基本结构。其中A和B两个框是顺序执行的。即在完成A框所指定的操作后,必然接着执行B框所指定的操作。
2025-01-16 20:12:59
1153
原创 Linux其他常用指令
功能:确认网络连接是畅通执行权限:所有用户语法:ping [选项] 目标IP/目标网址常用选项: -c count 显示count次应答后停止。
2025-01-09 19:50:31
276
原创 linux常用命令(解,压缩)
1、.tar用 tar –xvf 解包2、.gz 用 gzip -d或者gunzip 解压3、.tar.gz和.tgz 用 tar –xvzf 解压4、.bz2 用 bzip2 -d或者用bunzip2 解压5、.tar.bz2用tar –xjvf 解压6、*.zip 用 unzip 解压。
2025-01-09 19:36:43
419
原创 Vim编辑工具常用指令
vi的名字取自于visual,它是一个全屏幕文本编辑程序。在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。初学者可能感到困难,经过一段时间的学习和使用后,你就会体会到使用vi非常方便。vim是vi的增强版,所以vi的功能vim都有,而且vim新增了许多vi没有的功能,它比vi容易使用。
2025-01-09 19:31:44
931
原创 Linux常用基础指令
什么是操作系统?操作系统就是运行在硬件平台上的一套软件,可向应用程序提供访问硬件的接口,并可直接控制操作硬件的运行。应用程序是运行在操作系统上的。Linux操作系统因其安全,稳定,快速,支持多用户等特点,被广泛用于服务器上。又因为开源,免费,内核可裁剪等特点与嵌入式应用要求非常高的吻合度而广泛用于嵌入式系统开发。它的任务是接受命令输入,把命令传给命令解释器。
2025-01-07 20:10:39
878
原创 VMware Ubuntu安装教程
此处点击继续点击现在安装点击继续开始设置时区,此处默认Shanghai即可键盘布局选择汉语,并点击继续创建用户名和计算机名以及设置密码,点击继续(计算机名会根据用户名生成,可自行剪短,自动登录看个人喜好,此处为学习使用,勾选自动登录更加方便)开始正式安装Ubuntu,此处注意不要点击右下角skip耐心等待安装完成点击现在重启此处按下回车或者Crtl+c等待代码闪过,就可以进入到Ubuntu系统了。
2025-01-06 21:50:48
1012
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人