- 博客(20)
- 收藏
- 关注
原创 线程及条件变量
什么是线程:是进程内的一个执行分支,是一个新的执行流。线程的执行粒度要比进程要细。linux中线程如何理解linux实现方案,在Linux中,线程在进程”内部”执行,线程在进程的地址空间内运行任何执行流都要有资源cpu只有调度执行流的概念不关心是进程还是线程linux没有真正意义上的线程,而是用“进程”的数据结构模拟的线程pcb也就是一个执行流linux中的执行流,是一个轻量级进程。重新定义线程和进程线程是操作系统调度的基本单位进程是承担系统资源的基本实体。
2024-06-13 21:45:41
551
原创 进程等待与程序替换
我们创建多个进程以后,哪个进程先运行是不确定的,是由进程调度器决定。整个的调度过程我们不可知,父子兄弟进程谁先运行我们不确定。exit()为什么main函数总是返回0,这个东西给谁了,不能返回1,2,3等等其他的吗。main函数的返回值表示的是进程运行完成时是否是正确的结果,如果不是,可以用不同的数字,表示不同的出错原因。进程的退出场景:代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止0表示进程的退出码,进程的结果是正确的。谁会关心我们进程运行完的结果呢?
2024-05-16 08:59:01
691
原创 动态库的加载
程序加载的过程,首先可执行程序在编译的过程中按照程序地址空间相对应的方式在0到4G的大小给代码编址 ,然后程序放在磁盘中,加载程序时,cpu中的EIP/pc指针会拿到代码的入口地址entry(逻辑地址),然后通过页表到物理内存中找到物理地址,可能会触发缺页中断,程序还未加载完毕,之后程序完全加载到内存中,这样就完成了程序的加载。当我们执行到上面的指令时,指令会跳转到printf()函数,但是这个函数是库函数,这里的地址只是逻辑地址,库还没有放到共享区,但是我们库必须放到这个地址吗?
2024-05-16 08:47:07
449
原创 消息队列与信号量
是一个用于获取 System V 消息队列标识符的系统调用。让我为您解释一下它的用法和参数。: 指定的键值,用于关联消息队列。: 控制行为的标志。 可以用于两个目的:例如,以下代码片段演示了如何使用 创建一个新的消息队列:创建一个消息队列,如果该队列不存在,则会创建一个新的队列。msgget()函数的返回值为消息队列的标识符(一个非负整数),如果出错,返回值为 -1,同时 会被设置以指示错误原因 是一个用于在消息队列中传递消息的结构体,通常用于 和 系统调用。让我为您解释一下它的结构
2024-05-10 21:37:58
774
1
原创 进程,进程状态,进程切换,程序地址空间
一个已经加载到内存的程序,叫做进程。进程也可以叫做任务。正在运行的程序叫做进程一个操作系统不仅仅只运行一个进程,可以同时运行多个进程任何一个进程在加载到内存的时候,形成进程时,操作系统,要先创建描述进程(用足够多的属性值来描述)的结构体对象。pcb进程控制块(进程属性的集合)(struct 结构体类型 )进程的属性有哪些: 进程编号 进程状态 优先级描述该进程的PCB以及该进程的数据和代码,一起组成了进程。
2024-05-08 16:18:46
926
原创 linux指令篇
ll与ls -l 等价d开头是目录,-开头的是普通文件。带a的现实出了. 带点的是隐藏文件。-a表示显示出所有的文件,包括隐藏文件。linux 任何一个目录下都有两个隐藏文件,一个点和两个点的文件。…表示当前路径的上级路径cd … 退回到上级路径cd … 相当于window 下面的回退符. 一个点表示当前路径。一个点作用是在形成可执行程序时,运行可执行程序,限定在当前文件下,帮助用户定位当前目录下的文件。pwd 显示用户所在的目录。中间路径上级的/叫做路径分割符。
2024-04-26 22:41:44
513
原创 C++基础知识点
一个函数有多个意思。函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表(**参数个数或者类型或类型顺序)**不同,常用来处理实现功能类似数据类型不同的问题。函数重载对返回值没有要求。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。// “f”: 对重载函数的调用不明确 cout << Add(1 , 2) << endl;return 0;
2023-05-27 14:00:24
49
1
原创 排序算法——快速排序
我们的排序这里采用升序解释:给定一个数组,我们定义left,right两个变量来当作数组下标,一个keyi变量当作用来比较数据的下标。我们需要先从右边找小,在右边找到比keyi位置小的数据后,我们再从左边找大,找到后两个位置的数据交换顺序,直到left= right时我们的循环结束,这样就可以把比keyi位置大的数据分到右边,把小于的数据分到左边。我们完成代码后发现虽然它可以完成排序,但是在一定情况下效率很低,我们需要对代码进行分析,并且改进。
2023-04-23 15:47:00
50
原创 堆的排序应用
向下调整需要满足的条件是这个堆是大堆或者小堆,n 是堆中的数据个数,leftchild = parent*2+1,rightchild = parent * 2+2;这里以大堆为例,如果以下的数据是大堆,选出两个孩子中大的数据,与parent数据交换,然后继续判断交换后的数据是否满足大堆的关系,如果不能满足,继续交换,循环的结束条件是孩子的数组下标位置已经大于数据的个数,这里数据的个数相当于数组最后一个数据的下一个位置的下标。
2023-04-08 15:06:28
76
原创 单项链表中的循环
我们这里依然采用快慢指针来解决这个问题,定义一个快指针,一次走两步,一个慢指针一次走一步,快指针会先进入循环,慢指针后进入,这样问题就能变为快指针追击慢指针问题,快指针一次追击一个节点,所以快指针一定可以追上慢指针。当两个指针相等时链表则必定有环。
2023-03-27 23:09:24
36
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人