- 博客(98)
- 收藏
- 关注
原创 【leetcode C++】动态规划
不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是。如果可以利用字典中出现的一个或多个单词拼接出。,并且任意两个相邻元素之差相同,则称该数列为等差数列。满足仅满足下列条件时,我们称其为。是数组中的一个连续序列。
2024-10-28 13:20:40 506 8
原创 【linux】信号(下)
如果一个函数,被重复进入的情况下,可能会出错,则它是不可重入函数,否则,是可重入函数(比如链表的插入,如果有两个流都用同一个插入函数,执行同一个链表,可能会在插入时发生进程切换,导致一个流的插入函数没有执行完,就进行下一个流的插入,导致内存发生泄漏)因此,未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号 的“有效”或“无效”状态。从上图来看,每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多少次,阻塞标志也是这样表示的。
2024-10-13 20:55:52 1113 11
原创 【linux】信号(上)
1 ~ 31 : 普通信号(一般以位图的形式储存在对应的进程PCB中,tast_struct 中有 signal ,其中比特位的 0 ,1 表示是否收到信号,比特位的位置(第几个)表示信号编号,所谓的发送信号就是更改对应进程信号位图的比特位)这里是存在一些问题,如:信号可以发送很多次,但是迟迟没有处理信号,导致处理次数和发送信号次数不对等(处理次数可能会减少)34 ~ 64 : 实时信号(接受信号后,立刻处理信号,一般以链表的形式存储,所以发送信号次数和处理次数是一样的)sig : 信号编号。
2024-10-11 23:10:14 1108 13
原创 【linux】进程间通信(二)
申请信号量资源成功,就代表该进程具有访问资源的权限申请了信号量资源,不代表就一定访问了该资源,只是对这个资源的预定机制信号量可以有效保证共享资源的执行流的数量每一个执行流,想要访问共享资源中的一部分时,不是直接访问,而是先申请信号量资源把值为1,0的“计数器”叫做 二元信号量 -------- 本质就是一个锁申请信号量,本质是对计数器减减,即P操作;释放信号量,本质是对计数器加加,即V操作申请和释放都是原子的(即要么做完,要么不做)
2024-10-10 22:36:45 837 11
原创 【linux】进程间的通信(一)
由于子进程的进程PCB都是拷贝父进程的,所以子进程创建时(如果父进程一开始使用pipe函数,创建了匿名管道,并且只打开了读端),子进程本应该只能拿到写端(保证进程单向通信),但是由于继承了父进程的写端,容易导致不能达成单向,所以记得关闭多余的读写端。一般操作系统,会有一个独立的通信模块,隶属于文件系统,IPC通信模块会制定标准,所以进程间通信是有标准的。1. 只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信:通常,一个管道由一个进程创。因为进程独立性的存在,导致进程通信成本较高(通信需要成本)
2024-10-08 23:15:34 810 16
原创 【linux】进程控制(2)
path : 代表所执行的进程的路径 , arg : 代表要执行的进程以及指令(以 NULL 结尾)如果子进程不退出,父进程调用wait的时候,也不会返回,父进程会一直等待子进程,默认状态为阻塞状态。wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在。options = 0 , 进行阻塞等待 (父进程会一直等待它的子进程)如果我们传入自定义的环境变量参数,则替换进程的环境变量直接被参数覆盖。
2024-09-11 23:56:00 946 9
原创 【 linux 】环境变量
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但。是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。我们发现,添加进去后,不需要加相对路径或绝对路径,也可以找到 tmp进程。这里就跟环境变量中的PATH有关。
2024-07-02 16:05:12 530 55
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人