
Linux
文章平均质量分 93
为快乐起舞
吾本布衣,出自荷兰,四周大山.箪瓢屡空,环堵萧然,不弊风日.吾好读书,滴水石穿,笨鸟先飞,求知不断,方能立足,不羡孔北海之座上客常满,但求吾辈架上书常在.涸辙遗鲋,暮成括,人而无志,与彼何殊.Self-studyComputer Science. 愿为open source 自效微力.天高地阔,欲往观之.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux】 --- 线程池
我们将线程池进行了模板化,因此线程池当中存储的任务类型可以是任意的,但无论该任务是什么类型的,在该任务类当中都必须包含一个Run方法,当我们处理该类型的任务时只需调用该Run方法即可。此时线程池内的线程不断从任务队列拿出任务进行处理,而它们并不需要关心这些任务是哪来的,它们只需要拿到任务后执行对应的Run方法即可。主线程就负责不断向任务队列当中Push任务就行了,此后线程池当中的线程会从任务队列当中获取到这些任务并进行处理。线程池是一种线程使用模式。主函数:main.cc。原创 2025-03-29 15:39:23 · 1146 阅读 · 0 评论 -
【Linux】 --- 信号量
也就是说,当环形队列为空和满时,我们已经通过信号量保证了生产者和消费者的串行化过程。当执行流在申请信号量时,可能此时信号量的值为0,也就是说信号量描述的临界资源已经全部被申请了,此时该执行流就应该在该信号量的等待队列当中进行等待,直到有信号量被释放时再被唤醒。每个执行流在进入临界区之前都应该先申请信号量,申请成功,就有了操作特定的临界资源的权限,当操作完毕后就应该释放信号量。多个执行流为了访问临界资源会竞争式的申请信号量,因此信号量是会被多个执行流同时访问的,也就是说信号量本质也是临界资源。原创 2025-03-29 15:36:41 · 721 阅读 · 0 评论 -
【Linux】--- 基于阻塞队列:生产消费者模型
我们也可以当阻塞队列当中存储的数据大于队列容量的一半时,再唤醒消费者线程进行消费;当阻塞队列当中存储的数据小于队列容器的一半时,再唤醒生产者线程进行生产。原创 2025-03-28 09:40:15 · 1009 阅读 · 0 评论 -
【Linux】--- 线程同步
输出结果:可以看到,线程按照1 2 3 4 5的顺序依次输出了,这就是线程同步的作用。原创 2025-03-26 20:46:30 · 969 阅读 · 0 评论 -
【Linux】--- 线程互斥
既然–操作需要三个步骤才能完成,那么就有可能当thread1刚把tickets的值读进CPU就被切走了,也就是从CPU上剥离下来,假设此时thread1读取到的值就是1000,而当thread1被切走时,寄存器中的1000叫做thread1的上下文信息,因此需要被保存起来,之后thread1就被挂起了。临界区内的线程完全可能进行线程切换,但即便该线程被切走,其他线程也无法进入临界区进行资源访问,因为此时该线程是拿着锁被切走的,锁没有被释放也就意味着其他线程无法申请到锁,也就无法进入临界区进行资源访问了。原创 2025-03-24 20:44:13 · 825 阅读 · 0 评论 -
【Linux】--- 线程概念、线程控制
线程的标准概念:线程是进程中的的一个执行流,是CPU调度的基本单位!进程:进程是系统资源分配的基本单位!一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。关于进程需要明确的是,一个进程的创建实际上伴随着其进程控制块(task_struct)、进程地址空间(mm_struct)以及页表的创建,虚拟地址和物理地址就是通过页表建立映射的。每个进程都有自己独立的进程地址空间和独立的页表,也就意味着所有进程在运行时本身就具有独立性。关于线程。原创 2025-03-08 22:31:55 · 1124 阅读 · 0 评论 -
【Linux】--- 信号阻塞、信号捕捉
此处我们用(2) SIGINT做检测,先通过sigaddset(&set, 2)把set中的第二位变为1,随后通过sigprocmask(SIG_BLOCK, &set, nullptr)将set添加到block中,由于我们并不想知道旧的block是什么样,所以第三个参数设为nullptr。,指向信号的处理函数。如果时机合适,进程会检测pending表和block表,然后检测出已经接收到的信号,若该信号未被阻塞,执行对应信号的处理函数,并把pending中的该位变回0,表示该信号已经处理完了。原创 2025-02-17 20:33:06 · 909 阅读 · 0 评论 -
【Linux】--- 信号的概念、信号产生
再比如说我们之前的ctrl + C按键发送(2) SIGINT信号,本质也是硬件中断,当我们从键盘输入了数据后,键盘向CPU发出硬件中断,随后CPU去执行操作系统中的硬件中断程序,发现是用户按下了ctrl + C,于是操作系统向进程发送(2) SIGINT信号。以上就是Linux中的全部信号,它们分为两个区间:[1, 31] 和[34, 64],也就是说没有0,32,33这三个信号,虽然信号的最大编号为64,但实际上只有62个信号。经理收到这个信号后,会暂停当前的工作,转而去处理员工的请求。原创 2025-02-15 21:52:36 · 1159 阅读 · 0 评论 -
【Linux】--- 进程间的通信
进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的数据流称为一个“管道”。例如,统计我们当前使用云服务器上的登录用户个数。其中,who命令和wc命令都是两个程序,当它们运行起来后就变成了两个进程,who进程通过标准输出将数据打到“管道”当中,wc进程再通过标准输入从“管道”当中读取数据,至此便完成了数据的传输,进而完成数据的进一步加工处理。原创 2025-02-11 22:07:02 · 787 阅读 · 0 评论 -
【Linux】--- 基础IO
该函数会返回一个FILE*的指针,C语言中,通过操作这个 FILE * 来控制文件的IO。当我们打开文件时,每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的,取名FILE。我们可以通过操纵这个FILE类型的结构体,来操控文件。大部分情况下,我们可以得到一个指向该结构体的指针FILE*,即文件指针,后续通过文件指针来操控文件。上图中,三个指针pf1,pf2,pf3,它们都指向了一个FILE类型的文件信息区。原创 2025-02-03 20:45:32 · 1418 阅读 · 0 评论 -
【Linux】--- 制作一个简易的shell
【代码】【Linux】--- 制作一个简易的shell。原创 2025-01-30 20:04:50 · 548 阅读 · 0 评论 -
【Linux】--- 进程的等待与替换
例如,以下代码中同时创建了10个子进程,同时将子进程的pid放入到ids数组当中,并将这10个子进程退出时的退出码设置为该子进程pid在数组ids中的下标,之后父进程再使用waitpid函数指定等待这10个子进程。第一个参数是要执行程序的路径,第二个参数是一个指针数组,数组当中的内容表示你要如何执行这个程序,数组以NULL结尾,第三个参数是你自己设置的环境变量。第一个参数是要执行程序的路径,第二个参数是可变参数列表,表示你要如何执行这个程序,并以NULL结尾,第三个参数是你自己设置的环境变量。原创 2025-01-15 21:31:08 · 1272 阅读 · 0 评论 -
【Linux】--- Linux中进程的创建与终止
退出码都有对应的字符串含义,帮助用户确认执行失败的原因,而这些退出码具体代表什么含义是人为规定的,不同环境下相同的退出码的字符串含义可能不同。我们都知道main函数是代码的入口,但实际上main函数只是用户级别代码的入口,main函数也是被其他函数调用的,是间接性被操作系统所调用的。当子进程刚刚被创建时,子进程和父进程的数据和代码是共享的,即父子进程的代码和数据通过页表映射到物理内存的同一块空间。新进程为子进程,而原进程为父进程。3、为什么父进程返回的是子进程的pid,子进程返回的是0?原创 2025-01-15 11:58:11 · 964 阅读 · 0 评论 -
【Linux】--- 进程的概念
操作系统描述进程的时候就是PCB,PCB(process control block)在Linux中的PCB叫做:task_struct(task_struct就是PCB的一种)创建进程不仅仅是,把代码和数据加载到内存里,还要为进程创建task_struct所以:进程 = task_struct + 代码和数据根据:“先描述,再组织”①描述:task_struct在Linux内核中就是一种:结构体(里面包含着进程的相关信息)原创 2024-12-16 22:10:55 · 1347 阅读 · 0 评论 -
【Linux】--- 开发工具篇:yum、vim、gcc、g++、gdb、make、makefile
gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具,是命令行调试工具。一般来说,gdb主要完成如下四个功能:(1)启动程序,按照自定义要求随心所欲运行程序。(2)可让被调试的程序在指定的调试的断点处停住。(断点可以是条件表达式)(3)当程序被停住时,可以检查此时程序中所发生的事。(4)动态的改变程序的执行环境gcc 源文件 -o 目标文件 -g。原创 2024-10-30 21:39:34 · 1426 阅读 · 0 评论 -
【Linux】Shell命令运行原理和权限详解
因此,当一个目录被设置为"粘滞位"(chmod +t),则该目录下的文件只能由(1)超级管理员删除(2)该目录的所有者删除(3)该文件的所有者删除好了,今天的分享就到这里了我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!原创 2024-03-05 09:31:46 · 1561 阅读 · 9 评论