- 博客(44)
- 收藏
- 关注
原创 第61天 线程的互斥和同步
互斥锁(Mutex,即Mutual Exclusion Lock)是并发编程中用于的同步工具,本质是一把 “独占钥匙”;1.当多个线程同时读写共享资源时,会出现 “竞态条件”,导致数据错误;2.互斥锁能强制线程 “排队访问” 资源,避免竞争;核心作用:保证 “同一时刻,只有一个线程能持有锁并访问共享资源”,实现 “互斥访问”;
2026-11-05 09:37:22
205
原创 第60天 多线程相关函数
其终止后资源不会立即释放,必须由其他线程(通常是主线程),通过pthread_join( )主动回收;retval 用来给回收资源的线程传递线程的退出状态值 若不想返回退出状态值,可以传NULL。分离态的线程,终止后会由系统自动回收资源,无需其他线程调用pthread_join( );PTHREAD_CREATE_JOINABLE : 表示将线程设置为结合态。PTHREAD_CREATE_DETACHED :表示将线程设置为分离态。PTHREAD_CANCEL_ENABLE:可被取消(默认)
2026-10-30 15:59:13
203
原创 第59天 线程概念
1.线程的本质是“共享资源的轻量级进程(Lightweight Process,简称LWP)”;2.内核视角:每个线程对应一个“任务控制块(task_struct)”,内核通过task_struct管理调度单元;3.资源共享:多个LWP(线程)通过共享同一“进程地址空间(mm_struct)、文件描述符(files_struct)、信号处理表(signal_struct)”等核心资源,实现“线程共享进程资源”的特性;
2026-10-30 15:29:30
253
原创 第58天 进程间通信(二)
ipcs -q 仅显示消息队列的相关信息ipcs -m 仅显示共享内存段的相关信息ipcs -s 仅显示信号量的相关信息ipcs -a 显示所有类型的详细信息。
2026-10-29 10:27:09
85
原创 第56天 特殊进程
1.定义:当一个进程的父进程先于它终止,这个进程就会成为孤儿进程;2.产生原因:父进程意外崩溃、被强制终止(如kill -9),或父进程主动退出但未正确处理子进程;3.特点:1.失去父进程后,会被系统的“祖先进程”(linux中是init或system,PID=1)收养;2.仍能正常运行,完成自身任务后会正常终止,不会占用额外资源;4.影响:本身是系统正常处理机制的结果,无负面影响,反而避免了进程成为“无主进程”;例如:若父进程因bug崩溃,子进程被init收养后可继续提供服务;
2026-10-26 09:29:21
202
原创 第53天 进程基础
进程是操作系统中的一次执行过程,是操作系统进行资源分配和调度的基本单位。执行一个程序后,在内核空间创建一个task_struct结构体,这个结构体代表当前进程,进程产生的所有信息(如进程状态、PID、内存指针等)都放在这个结构体下。进程结束后,task_struct会被内核回收;如果异常崩溃,内核还会进行清理资源(避免僵尸进程);
2026-10-20 16:35:27
63
原创 第48天 库的制作
静态库是在程序编译链接阶段,其代码会被完整地”复制”到最终生成的可执行文件中,成为可执行 文件的一部分,编译完成后,静态库与可执行文件“绑定”,运行时无需额外依赖;动态库也称之为共享库,是在程序运行时才被加载到内存中,可以被多个可执行文件共享使用, 为它们提供函数、数据等资源;
2026-10-13 09:16:32
199
原创 第47天 文件IO函数
头文件:#include <sys/types.h>原型:int open(const char *pathname,int flags);参数:1.pathname : 文件路径和名字 ,不写路径默认打开当前路径下的文件2.flags:打开文件的方式:O_RDONLY :以只读方式打开文件,文件不存在则打开失败O_WRONLY :以只写方式打开文件,文件不存在则打开失败O_RDWR :以读写方式打开文件,文件不存在则打开失败O_APPEND :以追加方式打开文件,文件不存在则打开失败。
2026-10-12 09:57:12
183
原创 第46天 文件IO概念
文件描述符是操作系统内核为每个打开的文件/设备分配的唯一整数标识符,用于标识和跟踪进程 与文件的交互,在Linux/Unix中,它是底层文件IO操作的核心参数;
2026-10-10 16:17:56
190
原创 第46天 标准IO函数(二)
当feof检测到文件结尾后,如果想要重新读取文件,必须先调用clearerr清除结束标志,否则feof会持续返回非0;错误标志位一旦置位,后续若不调用 clearerr 清除,ferror 会一直返回非 0,直到标志被手动清除。fread不区分文件结束(EOF)或者是读取错误,调用者必须使用feof函数或者ferror函数来区分场景。当ferror检测到错误,修复问题后,必须先调用clearerr清除错误标志,让文件流恢复可用状态;返回值小于nmemb时,可能是遇到了文件结束(EOF)或者是出现了错误。
2026-10-10 10:59:42
121
原创 第45天 标准IO函数(一)
1.头文件: #include<stdio.h>2.原型: FILE *fopen(const char *pathname,const char *mode);3.参数:pathname :文件路径和名字 , 不写路径默认打开当前路径下的文件mode:打开文件的方式:r:以只读的方式打开文件,,如果文件不存在则会报错r+:以读写的方式打开文件,将光标定位到文件开头,如果文件不存在则会报错w:以只写方式打开文件,如果文件存在就清空;如果文件不存在就创建,将光标定位到开头。
2026-10-09 09:27:14
176
原创 第44天 标准IO概念
IO(Input/Output)是计算机系统中数据在不同实体间传输交互的抽象过程,涵盖程序与外部设备 (如文件、硬件、网络)的数据读写行为。本质上,它是程序与外部环境建立“数据通道”的核心机制,支撑 着程序获取输入、输出结果的基本逻辑,是软件与硬件、本地与远程交互的底层依托;1.定义:标准 I/O 是 C 库提供的输入输出函数集合,由 ANSI C 标准统一规范,为跨平台 IO 操作奠定基础;
2026-10-08 16:44:29
142
原创 第44天 Linux IO环境搭建
虚拟机网络模式 :1.桥接模式:虚拟机与主机共享物理网卡 获取同网段 IP;可直接访问外网;同一网段可双向通信;需对外提供服务时用 如搭建 Web 服务器、与其他设备 互相访问等等;2.NAT 模式:虚拟机用私有 IP 流量经主机 NAT 转发;可访问外网 (依赖主机 NAT 转发);天然互通 (无需额外配置);开发首选 如快速联网装环境、主机直连 SSH 等等;
2026-10-08 09:32:08
220
原创 第42天 shell编程
在 shell 编程中,函数是一种将多次使用的代码块封装起来的机制,它可以提高代码的复用性和可维护性;基础语法标准格式:function 函数名() {命令1命令2...[return 返回值] # 可选,返回值范围0-255简化格式(省略function关键字):函数名() {命令1命令2...函数调用:直接使用函数名即可调用,若函数需要参数,直接跟在函数名后面,参数之间用空格分隔;
2026-09-29 09:32:08
8
原创 第40天 Makefile
1. = 延迟赋值:当使用此变量时,才会对变量进行赋值操作;格式:变量名 = 变量的初始值;2. :=立即赋值:定义时直接展开,不支持引用未定义变量;格式:变量名 := 变量的初始值;3. +=追加赋值:在原有值后添加新字符串,用空格分隔;格式:变量名 += 变量的初始值;4.?=条件赋值:判断变量是否有初始值,如果有值就不赋值;如果没有初始值,才会进行赋值的操作;格式:变量名?= 变量的初始值;
2026-09-24 14:38:43
158
原创 第39天 环境变量配置
1.定义:PATH 以冒号分隔的形式,有序存储着一系列可执行文件所在 的目录路径。2.关键作用:系统会依据 PATH 自动定位对应可执行文件,让用户摆脱繁琐路径输入,高效完成操作;3.格式与操作:1. 格式:路径间以冒号分隔,如 /usr/local/bin:/usr/bin:/bin ,路径排列顺序决定检索优先级;2.查看与修改:1.通过 echo $PATH 查看当前配置;2.使用 export PATH="$PATH:/new_path" 可临时添加路径;
2026-09-23 14:28:39
138
原创 第38天 Linux下文本编辑
安装方式:在终端执行sudo apt install vim更新 :sudo apt update分屏启动:vim 路径/文件名1 路径/文件名2 -O可左右分屏打开两个文件,方便对比编辑;vim -O 路径/文件名1 路径/文件名2保存并退出:在底行模式下输入:wq ,保存对文件的修改并退出 vim;强制退出:在底行模式下输入:q!,不保存文件修改直接退出 vim;多个分屏退出:在 vim 的命令操作中, 加上all即可对多个分屏进行批量操作;
2026-09-22 10:58:25
135
原创 第36~37天 Linux 基础命令
命令名+空格+【选项】+空格+【参数】1.命令名:必不可少的核心部分,是执行特定操作的基础标识符,由英文单词或者是单词缩写构成;2.选项:用于灵活调整命令的执行行为和输出格式。可根据实际需求决定是否使用;通常以短选项“-”或者是长选项“--”作为前缀;3.参数:作为命令操作的对象或数据来源,也并非总是必需,参数可能是文件路径、目录名、字符串 等等;
2026-09-21 10:51:49
170
原创 第35天 Linux操作系统介绍
操作系统(Operating System,OS)是管理计算机硬件与软件资源的系统软件, 通过抽象底层硬件复杂性,为用户提供标准化接口,实现对软硬件资源的高效协调与优化利用;
2026-09-20 08:58:02
232
原创 第30天 查找算法
特点:数据集是,查找过程中不允许修改(例如,不允许插入或删除元素)。查找操作的效率通常只依赖于数据集的结构和查找算法。特点:数据集是动态变化的,查找过程中可能会进行插入、删除或修改操作。需要一种能够动态更新的数据结构,常见的有查找效率不仅取决于查找算法,还与数据如何变化、如何组织和更新数据有关。时间复杂度:O(1)或者O(n)
2026-09-16 15:37:18
74
原创 第29天 栈和队列
GetTop 取栈顶元素 O(1) 返回栈顶元素的值,但不删除栈顶元素。DestroyStack 销毁栈 O(1) O(n)ClearStack 清空栈 O(1) O(n)initStack 初始化栈 O(1)StackLength 获取栈长度 O(1)isEmpty 判断栈是否为空 O(1)isFull 判断栈是否满 O(1)pop 出栈 O(1)push 入栈 O(1)
2026-09-10 18:42:44
99
原创 第22~26天 线性表
顺序表插入一个元素的时间复杂度:O(n)删除一个元素的时间复杂度:O(n)链表:内存不连续,分散内存,通过指针保存下一个节点的地址。中间插入,删除性能高。数组:内存连续,大小固定,支持随机访问(数组下标),访问性能最高中间插入,删除性能偏低。动态数组:堆区创建的数组插入/删除:链表O(1)(只需改指针),数组O(n)(需移动元素)。随机访问:链表O(n)(得从头遍历),数组O(1)(直接下标)。内存:链表不连续,无碎片问题,但每个节点多耗内存存指针。Dummy 节点。
2026-09-08 09:40:38
227
原创 第21天 数据结构
队列常用于任务调度中的先进先出(FIFO)机制,确保先到的任务先执行。树和哈希表适合存储和查找操作,堆栈用于后进先出的操作。适合用于实现浏览器的历史记录回退功能文件系统目录结构通常使用树结构,动态规划问题需要二维数组或矩阵来处理。图数据结构适用于表示节点之间复杂的连接关系,如计算路径最短的道路。查找最大值、最小值和数据排序通常使用数组或其他排序算法,计算和使用数组存储。
2026-09-01 09:26:40
168
原创 第17 ~19天 串讲...
参数可以是void,或者是int argc,char const *argv[]命令行参数,argc表示传递了几个参数argv表示参数的内容。
2026-08-31 08:54:28
223
原创 第16天 C语言复习 3
定义声明最重要的区别:定义:创建了对象并为这个对象分配了内存.并给它命名.声明:没有分配内存.定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据。32 位的 signed int 类型整数其值表示法范围为:- 2^31~-2^31 -132 位的 unsigned int 类型整数其值表示法范围为:0~2^32 -18 位的 char 类型数其值表示的范围为- 2^7~2^7 -1。
2026-08-25 09:33:24
198
原创 第12天 C语言复习
a.语法:#define 常量名 常量值b.特点:#define 是简单的文本替换,不占用内存。无类型检查,因此不具备类型安全性。#define是预处理指令,程序运行时无法修改常量的值。a.语法 :const 数据类型 变量名=常量值b.特点:const 常量有类型限制,编译器会进行类型检查。const 常量存储在内存中,可以参与程序运行时的计算。1.定义不可变的值2.使用常量可以使代码更加易读和可理解。3.常量使得程序更加易于维护。
2026-08-22 14:03:30
222
原创 第10天 指针
在某些应用中,程序需要临时存储大量数据(如文件数据、网络数据、日志数据等)。可以使用 malloc 或 calloc 动态分配缓存,根据需要调整缓存大小。
2026-08-14 19:35:41
319
原创 第9天 函数
包含函数的具体实现,定义了函数的行为。格式: 返回类型 函数名(参数类型 参数名, ...) {// 函数体,执行的操作return 返回值;
2026-08-13 20:03:04
354
原创 第7,8天 聚合数据类型
struct 结构体名数据类型 成员名1;数据类型 成员名2;// 其他成员定义结构体类型后,可以通过以下方式定义结构体变量:使用点运算符”.”访问结构体成员:int age;int main()//初始化结构体成员//输出结构体成员return 0;体s.mode = 3;s.data = 9;return 0;位域的位数超过宿主类型的大小会导致编译错误。
2026-08-12 19:53:55
159
原创 第6天 循环结构,数组
如果没有数组,当需要处理多个相同类型的数据时,必须为每个数据单独定义一个变量。例如,处理10个整数,你需要定义 10个变量:这显然会使代码冗长、繁琐,尤其当数据量很大时变得不切实际。而使用数组可以通过一个变量来存储多个数据,显著简化 代码:字符数组是用于存储字符序列的数组,每个元素是一个字符类型(char)。字符数组通常用于表示字符串,但本质上它只是字符的集合。
2026-08-11 16:11:59
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅