
linux
文章平均质量分 72
DayDay upup
这个作者很懒,什么都没留下…
展开
-
POSIX信号量
P操作:申请信号量,进入临界资源前,会申请信号量,x–,如果x为0时,则会堵塞等待。每个执行流要进入临界资源时,要先申请信号量,出临界资源时,要释放信号量。功能:发布信号量,表示资源使用完毕,可以归还资源了。V操作:释放信号量,出临界资源后,会释放信号量,x++pshared:0表示线程间共享,非零表示进程间共享。信号量是一个计数器,用来描述临界资源数量的计数器。功能:等待信号量,会将信号量的值减1。sem: 输出型参数,信号量的标号。value:信号量初始值 即x的值。原创 2022-11-23 16:34:31 · 249 阅读 · 0 评论 -
linux线程同步
条件等待是线程间同步的一种手段,如果只有一个线程,条件不满足,一直等下去都不会满足,所以必须要有一个线程通过某些操作,改变共享变量,使原先不满足的条件变得满足,并且友好的通知等待在条件 变量上的线程。条件不会无缘无故的突然变得满足了,必然会牵扯到共享数据的变化。:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问。:当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。:因为时序问题,而导致程序异常,我们称之为竞态条件。原创 2022-11-23 11:41:12 · 209 阅读 · 0 评论 -
linux线程互斥
大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个。但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之。如果多个线程同时要求执行临界区的代码,并且临界区没有线程在执行,那么只能允许一个线程进入该临。发起函数调用时,其他线程已经锁定互斥量,或者存在其他线程同时申请互斥量,但没有竞争到互斥量,:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。多个线程并发的操作共享变量,会带来一些问题。原创 2022-11-18 19:29:24 · 313 阅读 · 0 评论 -
linux多线程
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程 执行流。原创 2022-11-16 22:04:21 · 197 阅读 · 0 评论 -
进程间的匿名通信(匿名管道)
1. 父进程与子进程的读写是有一定顺序的,当父进程没写入数据时,子进程会在read处等待,所以,父进程写入后,子进程read才会读取数据。进程间的匿名通信(匿名管道)2. 当父进程关闭写入的文件描述符,子进程read会接收到信号,读到的字符数为0,依据这个判断结束int main(){ int pipefd[2]; pipe(pipefd); pid_t id =fork(); if(id==0) { //子进程 ,进行读 c原创 2022-10-31 20:37:36 · 184 阅读 · 0 评论 -
Linux动静态库
使用静态库生成可执行程序会占用大量空间,特别是当有多个静态程序同时加载而这些静态程序使用的都是相同的库,这时在内存当中就会存在大量的重复代码。节省磁盘空间,且多个用到相同动态库的程序同时运行时,库文件会通过进程地址空间进行共享,内存当中不会存在重复代码。静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。在/etc/ld.so.conf.d/路径下,添加新文件,写入动态库的路径即可。原创 2022-10-28 22:10:13 · 854 阅读 · 0 评论 -
C语言中的缓冲区
缓冲区的本质:一段内存假设没有缓冲区,处理数据采取的方案,直接将数据进行刷新,IO次数较多,从而降低整机的效率。因此:我们在进程中,取一段内存作为缓冲区,集中处理数据,减少IO次数,从而达到整机效率的目的以下为证明过程:上面这段代码中执行结果是怎么的?先输出write,,5秒后在输出,printf fprintf fgets原因:缓冲区是语言层提供的,printf fprintf fgets先进入缓冲区,等待刷新,write为系统调用,没有缓冲区,直接刷新,sleep过后,进程退出,刷新缓冲区常规:特原创 2022-10-24 20:57:06 · 967 阅读 · 1 评论 -
linux系统下的文件操作
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。进程内部有过管理文件指针的数组,当我们增加打开的文件时,就会从头遍历,找到没有使用的下标,分配给新文件。Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2.O_CREAT : 若文件不存在,则创建它。0,1,2对应的物理设备一般是:键盘,显示器,显示器。pathname: 要打开或创建的目标文件。O_WRONLY: 只写打开。O_RDWR : 读,写打开。原创 2022-10-19 18:57:03 · 262 阅读 · 0 评论 -
进程替换(理解Xshell的基本原理)
Xshell在执行我们的命令时,会将我们的命令进行解析,在创建一个子进程(fork),再进行子进程的替换(execvp),父进程等待子进程的退出(wait)用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。例如在这样的一个进程替换中,最后一行的printf不会执行。,从新程序的启动例程开始执行。以下几个为常用的进程替换函数。原创 2022-10-07 20:17:44 · 257 阅读 · 0 评论 -
fork函数
另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。(查看进程的退出码)最后,父进程派给子进程的任务完成的如何,我们需要知道。子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。当正常返回的时候waitpid返回收集到的子进程的进程ID;原创 2022-08-25 16:43:09 · 112 阅读 · 0 评论 -
linux进程概念
CPU处理数据的速度远远大于其他设备,根据木桶效应,计算机的效率就受到限制,因此,前人就设计出内存,让内存作为CPU与外设交互的中介,适配外设和CPU速度不均的问题。I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。原创 2022-08-23 20:47:36 · 109 阅读 · 0 评论