
Linux
文章平均质量分 96
Asher_qq
这个作者很懒,什么都没留下…
展开
-
【Linux —— POSIX信号量 - 基于环形队列的生产消费模型】
POSIX信号量提供了一组函数来创建、操作和销毁信号量。环形结构起始状态和结束状态都是一样的,不好判断为空或者为满,所以可以通过加计数器或者标记位来。但是我们现在有信号量这个计数器,就很简单的进行多线程间的同步过程。另外也可以预留一个空的位置,作为满的状态。POSIX信号量是一种用于进程和线程之间。信号量是一种同步原语,通常表现为一个。操作(等待操作),尝试获取信号量。,知道信号量的值增加到允许的范围。如果一个进程尝试将信号量的值。: 初始化未命名信号量。原创 2024-08-28 21:03:46 · 1289 阅读 · 0 评论 -
【Linux —— 生产者消费者模型】
生产者消费者模型是一种并发编程模型,用于解决多线程或多进程间的数据共享和同步问题。生产者和消费者,它们通过共享的缓冲区进行通信。生产者负责生成数据并将其放入缓冲区,而消费者则从缓冲区中获取数据并进行处理。生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而共享的缓冲区进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给缓冲区,消费者不找生产者要数据,而是直接从缓冲区取,平衡了生产者和消费者的处理能力。这个缓冲区就是用来给生产者和消费者解耦的。原创 2024-08-27 22:00:40 · 1121 阅读 · 1 评论 -
【Linux —— 线程同步 - 条件变量】
当线程调用该函数时,互斥锁会被自动解锁,允许其他线程访问和修改共享资源。线程在等待条件变量时,必须持有互斥锁,以防止竞争条件,并在被唤醒后重新获取互斥锁,以确保对共享资源的安全访问。在唤醒线程之后,主线程会打印一条消息,表示已经唤醒了一个线程,并睡眠 2 秒钟。来进入等待状态时,互斥量会被自动解锁,允许其他线程修改共享资源和条件状态。被唤醒的线程在继续执行之前,必须重新获取互斥量并检查条件是否满足。:唤醒一个等待该条件变量的线程。,允许线程在某个条件不满足时进入等待状态,直到其他线程通知条件已满足。原创 2024-08-26 21:38:36 · 763 阅读 · 0 评论 -
【Linux —— 线程互斥】
互斥是一种同步机制,旨在确保同一时刻只有一个执行流(线程或者进程)可以进入临界区。互斥通常通过互斥量(mutex)来实现。互斥量是一种锁,线程或进程在访问临界资源之前需要获取这个锁,完成后释放它。原创 2024-08-21 23:48:13 · 1066 阅读 · 0 评论 -
【Linux —— 理解pthread库和底层逻辑】
这些函数都是对系统调用的封装,提供高效、标准化的多线程编程接口,它通过动态加载和链接机制,不仅节省了系统资源,还提供了灵活的升级路径。在使用pthread库时,程序可以享受标准线程操作接口的便利,而不必关心底层复杂的线程管理和调度细节。实际上,pthread_t 在内部可能是一个线程控制块(TCB)的指针,或者是一个可以唯一标识线程的 ID。标准下的线程管理功能,它提供了**创建、管理、同步和销毁线程的函数。的主要任务就是在一个进程中创建一个新的线程,新的线程共享地址空间和部分资源。,即一个无符号长整型。原创 2024-08-15 11:26:02 · 1373 阅读 · 0 评论 -
【Linux —— 线程控制】
Linux 线程控制原创 2024-08-15 09:22:42 · 789 阅读 · 0 评论 -
【Linux —— 虚拟地址空间与二级页表的管理与转换】
二级页表(Two-Level Page Table)是一种内存管理结构,主要用于减少虚拟地址空间管理中的内存开销。页目录索引、页表索引和页内偏移量。二级页表通过引入页目录和页表两级结构,减少了直接使用单级页表所需的巨大内存。原创 2024-08-12 21:36:17 · 1529 阅读 · 0 评论 -
【Linux进程信号】
下面我们通过图来理解一下:用户态进程正在执行正常的程序指令,因为中断、异常或系统调用,CPU从用户态切换到。原创 2024-08-08 15:09:14 · 1030 阅读 · 0 评论 -
【Linux 进程间通信 —— systemV 信号量】
在并发编程中,多个进程或线程可能同时访问共享资源,如果不加以限制,就会出现竞态条件(Race Condition)。竞态条件指的是多个进程或线程在相同的资源上进行读写操作时,由于执行顺序的不确定性,导致程序的行为出现异常或结果不一致的情况。原创 2024-05-16 16:37:03 · 912 阅读 · 0 评论 -
【Linux 进程间通信 —— systemV 共享内存】
因为共享内存其自身的特点,没有额外的拷贝过程,所以共享内存是进程最快的方式,所以共享内存并不保证通信的同步,数据在读取之后也不会清空,所以就能看到一直在之前所读到底字符串后面添加继续打印,。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据.此时再运行程序,即可发现关联该共享内存的进程数由0变成了1,而共享内存的权限显示也不再是0,而是我们设置的666权限。来创建了一个共享内存,打印出其key的十六进制数和shmid。原创 2024-05-16 16:23:03 · 1255 阅读 · 0 评论 -
【Linux进程通信 —— 管道】
在 Linux 中,进程间通信(IPC,Inter-Process Communication)是指不同进程之间交换数据和信息的一种机制。这种通信可以是在同一台计算机上的不同进程之间,也可以是在不同计算机之间的进程之间。管道(Pipe)是一种用于进程间通信的机制,允许一个进程的输出直接成为另一个进程的输入。它主要用于在父进程和子进程之间或者在同时运行的两个进程之间进行通信。管道可以分为匿名管道(Anonymous Pipe)和命名管道(Named Pipe)两种类型。原创 2024-05-15 21:32:28 · 850 阅读 · 1 评论 -
【Linux动态库和静态库】
在链接阶段,编译器会将编译后的目标文件和库文件链接成一个可执行文件。这时候库文件才发挥作用,它们被链接到可执行文件中,使得可执行文件包含了库中的函数和数据。对于静态库,链接器会将库中的目标文件直接复制并链接到可执行文件中;对于动态库,链接器只会在可执行文件中包含对动态库的引用,而不包含实际的库函数和数据。原创 2024-04-28 11:27:37 · 855 阅读 · 0 评论 -
【Linux —— 再谈软硬链接】
再谈软硬链接原创 2024-04-22 11:09:12 · 1051 阅读 · 3 评论 -
【Linux基础IO】
man 2 open。原创 2024-04-10 15:01:29 · 768 阅读 · 4 评论 -
【Linux 进程概念】
计算机管理硬件描述起来,用struct结构体组织起来,用链表或其他高效的数据结构。原创 2024-03-20 16:23:57 · 1188 阅读 · 3 评论 -
【Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)】
在我们每次重新生成可执行程序前,都应该将上一次生成可执行程序时生成的一系列文件进行清理,但是如果我们每次都手动执行一系列指令进行清理工作的话,未免有些麻烦,因为每次清理时执行的都是相同的清理指令,这时我们可以将项目清理的指令也加入到Makefile文件当中。对同一份源代码分别生成其release版本和debug版本的可执行程序,并通过ll指令可以看到,debug版本发布的可执行程序的大小比release版本发布的可执行程序的大小要大一点,其原因就是以debug版本发布的可执行程序当中包含了更多的调试信息。原创 2024-02-09 13:27:10 · 4518 阅读 · 2 评论 -
【Shell的运行原理以及Linux当中的权限问题】
该提示说你没有被超级用户(root)添加到信用列表当中,所以该条指令的权限得不到提升(你想想嘛,怎么可能让一个普通用户随意更改另一个普通用户的密码嘛),只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。原创 2024-02-04 16:49:42 · 1066 阅读 · 0 评论 -
【Linux常见指令汇总(入门必备)】
特别注意: 上面说到 -f 是强制性删除,-r 是递归式删除,这两个结合在一起就是递归式强制性删除,千万不要执行以下指令,因为在Linux当中没有类似回收站的东西也没有撤销删除的功能,删除指令一旦执行则是不可逆的。4)网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup。2)-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。原创 2024-02-04 00:51:30 · 1010 阅读 · 0 评论