Linux
文章平均质量分 84
讲述自己的Linux学习之路
被资本驾驭
这个作者很懒,什么都没留下…
展开
-
Linux(十四) 线程池
一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。原创 2024-05-21 11:29:12 · 483 阅读 · 0 评论 -
读写锁的使用
在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢?有,那就是读写锁。原创 2024-05-17 17:24:17 · 257 阅读 · 0 评论 -
Linux(十三) 生产者消费者模型
比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A相当于生产者,B相当于消费者。原创 2024-05-17 17:00:06 · 847 阅读 · 0 评论 -
Linux(十二) 线程同步
调用解锁之后,pthread_ cond_ wait之前,如果已经有其他线程获取到互斥量,摒弃条件满足,发送了信号,那么pthread_ cond_ wait将错过这个信号,可能会导致线程永远阻塞在这个pthread_ cond_ wait。等于,就把互斥量变成1(即解锁),直到cond_ wait返回,把条件量改成1,把互斥量恢复成原样(加锁)。例如一个线程访问队列时,发现队列为空,它只能等待,只到其它线程将一个节点添加到队列中。竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。原创 2024-05-16 17:24:23 · 285 阅读 · 0 评论 -
Linux(十一) 线程互斥
为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的 总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。加锁之后,线程在临界区里,依然会被OS切换,但不会有问题,因为线程虽然被切换了,但是是持有锁被切换的,其他抢票的线程要执行临界区的代码必须先申请锁,但此时锁无法申请成功。为了保证锁的安全,锁的申请和释放必须是原子的。原创 2024-05-16 16:45:15 · 793 阅读 · 0 评论 -
Linux(十) 线程,线程控制
在Linux下,PCB原创 2024-05-15 13:58:13 · 974 阅读 · 1 评论 -
Linux(九) 信号
输入命令,在Shell下启动一个前台进程。用户按下Ctrl+C,键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行, CPU从用户态切换到内核态处理硬件中断。终端驱动程序将Ctrl+C解释成一个SIGINT信号,操作系统OS将其记在该进程的PCB中(也可以说发送了一个SIGINT信号给该进程)。原创 2024-05-15 13:57:49 · 1003 阅读 · 0 评论 -
Linux(八) 进程间通信
Linux 管道使用竖线 | 连接多个命令,这被称为管道符。以上这行代码就组成了一个管道,它的功能是将前一个命令(command1)的输出,作为后一个命令(command2)的输入,从这个功能描述中,我们可以看出管道中的数据只能单向流动,也就是半双工通信,如果想实现相互通信(全双工通信),我们需要创建两个管道才行。另外,通过管道符 | 创建的管道是匿名管道,用完了就会被自动销毁。并且,匿名管道只能在具有亲缘关系(父子进程)的进程间使用。也就是说,匿名管道只能用于父子进程之间的通信。原创 2024-05-11 18:56:10 · 1102 阅读 · 3 评论 -
Linux(七) 动静态库
的时候才去链接动态库的代码,在可执行程序装载或运行时,由操作系统的装载程序加载库,多个程序共享使用库的代码。命令查看可执行程序的依赖库,动态链接生成的可执行程序才有依赖库,静态链接升序的可执行程序不依赖任何库文件,因为库文件的代码已经复制进可执行程序了。上面这两个步骤其实就把静态库打包好了,下面我们还有做一个工作就是发布静态库,简单地说,就是把头文件和静态库组织起来,头文件放在。可以看到的是,使用静态库静态链接成的可执行程序比动态链接生成的可执行程序要大很多。: Linux下,以.so为后缀的文件。原创 2024-05-11 18:56:03 · 826 阅读 · 2 评论 -
Linux(六)文件系统
这样一个数据块连着一个数据块,从链头开始就可以顺着指针找到所有的数据块,所以存放的方式可以是不连续的。隐式链表的存放方式的。原创 2024-05-06 22:38:18 · 669 阅读 · 0 评论 -
Linux(五) 进程控制
WIFEXITED(status) 检查子进程是否退出,返回一个非零值表示进程正常退出,否则返回0这个宏会检查status中的低 8 位,如果为 0 则表示子进程正常退出。使用这个宏可以方便地判断子进程的退出状态,而无需直接操作status。WEXITSTATUS(status)用于获取子进程的退出状态码WIFSIGNALED(status)用于检查子进程是否因为信号终止的宏这个宏会检查status。原创 2024-03-24 21:58:04 · 1905 阅读 · 1 评论 -
Linux(四) 进程
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库, shell程序等等)感性的理解:操作系统是一个搞管理的软件例如:管理进程,管理硬件(将显卡、键盘、显示器抽象成一个个文件),管理文件那么操作系统是怎么管理的呢?先描述再组织内核观点:担当分配系统资源(CPU时间,内存)的实体。当可执行程序从磁盘加载到内存就成为了进程即正在执行程序,或在等待队列中的程序。原创 2024-03-19 09:03:16 · 1720 阅读 · 1 评论 -
Linux(三) Linux基础开发工具的使用
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技术。原创 2024-03-18 12:19:29 · 375 阅读 · 1 评论 -
make和makefile(Makefile) + ACM时间
make是一个命令makefile(Makefile)则是一个文件。原创 2024-03-18 11:07:50 · 295 阅读 · 1 评论 -
Linux gcc编译器默认C99标准编译
可以在bash配置文件(如.bashrc或.bash_profile)中设置一个别名来简化编译命令。第四步、需要重新加载该文件令该文件生效。之后再使用gcc命令进行编译时就是默认c99标准了。可以使用如下代码查询你的gcc编译器默认标准。如果没查到,则默认支持的是 C89 标准。,则默认支持的是 C99 标准;,则默认支持的是 C11 标准;,则默认支持的是 C17 标准;因为gcc默认c89版本编译。第二步、在文件中添加别名。第一步、打开配置文件。原创 2024-02-29 20:04:09 · 1282 阅读 · 1 评论 -
Linux(二) 权限
权限是针对人的,事物的基本属性决定权限的相关概念即人是否可以读写执行一个文件权限的核心:人+事物属性。原创 2024-02-29 19:28:38 · 305 阅读 · 1 评论 -
Linux(一) 操作指令
Access time (atime):当我们访问该文件时,就会更新这个时间为最后一次访问该文件的时间。Change time (ctime):当该文件的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是文件权限、属性、inode号等被更改了,都会更新这个时间。Modification time (mtime):当该文件的『内容数据』变更时,就会更新这个时间!zip name.zip xxx -r #将目录里所有文件或目录压缩,不加-r只能压缩xxx。>>:追加重定向(追加式的写入)原创 2024-02-29 16:31:44 · 1345 阅读 · 1 评论