![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 52
失落的换海迷风
关注我了解最近咨询
展开
-
【linux】linux下head和tail命令详解
1、test1.txt 文件的内容 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 g 11 k 12 l 13 m2、head命令命令1 :head test1.txt命令2:head -n 3 test1.txt命令3:head -n +3 test1.txt命令4:head -n -3 test1.txt命令5:head -c 4原创 2021-09-15 20:11:15 · 402 阅读 · 0 评论 -
【linux】什么是协程?为什么要引入协程?
1、什么是协程?协程跟线程都代表一个执行序列。不同的是,协程把线程中不确定的地方尽可能的去掉,执行序列间的切换不再由CPU隐藏的进行,而是由程序显式的进行。所以,使用协程实现并发,需要多个协程彼此协作。 2、为什么要引入协程?我们知道操作系统在线程等待IO的时候,会阻塞当前线程,切换到其它线程,这样在当前线程等待IO的过程中,其它线程可以继续执行。当系统线程较少的时候没有什么问题,但是当线程数量非常多的时候,却产生了问题。一是系统线程会占用非常多的内存空间,二是过多的线程切换会占用大量的转载 2021-08-16 15:22:26 · 1487 阅读 · 0 评论 -
【操作系统】高级IO
高级IO原创 2021-07-01 23:16:30 · 244 阅读 · 2 评论 -
【linux】信号量版本的生产者消费者模型实现代码
#include <iostream>#include <semaphore.h>#include <unistd.h>#include <vector>// 信号量版本的生产者消费者模型class RingQueue{ public: RingQueue(int capacity) : vec_(capacity) { capacity_ = capacity; sem_init(&am原创 2021-06-03 09:39:34 · 116 阅读 · 0 评论 -
【linux】线程池实现代码
#include <iostream>#include <unistd.h>#include <queue>#include <pthread.h>#include <mutex>typedef void (*Handler)(int);class QueueData{ public: QueueData(int data, Handler handler) { data_ = data;原创 2021-06-03 08:24:40 · 135 阅读 · 0 评论 -
【linux】生产者与消费者模型实现代码
#include <iostream>#include <pthread.h>#include <mutex>#include <queue>#include <unistd.h>#define CAPACITY 10#define THREADCOUNT 2// 生产者和消费者模型class BlockQueue{ public: BlockQueue() { capacity_ = CAP原创 2021-06-03 08:21:57 · 333 阅读 · 0 评论 -
【操作系统】线程详解
线程原创 2021-06-01 22:06:11 · 545 阅读 · 0 评论 -
【Linux】问题解决---cannot lock ref ‘HEAD‘: unable to resolve reference ‘refs/heads/master‘
一旦出现了这种情况,对于大佬级别的人来说那就很容易解决。对于我这种很菜的人来说,建议大家直接重新将库下载下来。 ,出现这个问题的原因:就是你的电脑的问题,或者虚拟机的问题,你在push到远程仓库的时候然后虚拟机卡掉了,之后重启虚拟机,再次push的时候就会出现这样子的(据说commit也会,但是我是push的时候出现的问题) 从Github远程仓库克隆到本地Git仓库...原创 2020-12-16 17:17:40 · 7042 阅读 · 2 评论 -
【Linux】读写锁
1.应用场景大量读,少量写的场景读的本质:只是去访问变量的内容,但是没有修改不修改,不会导致数据的二义性 2.初始化和销毁 int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlock_rwlockattr_t *restrict attr)pthread_rwlock_t : 读写锁的类型,一般情况下使用的时候,都是传入变量的地址pthread_rwlockattr_t :读写锁的属性,一般传递原创 2020-12-03 15:49:22 · 146 阅读 · 0 评论 -
【Linux】posix版本的信号量
1.信号量 本质:计数器+PCB等待队列+一堆的接口(等待接口+唤醒接口)计数器:本质是对资源的计数① 当执行流获取信号量成功之后,信号量当中的计数器会进行减1操作,当获取失败之后,该执行流会被放到PCB等待队列当中② 当执行流释放信号成功之后,信号量当中的计数器会进行加1操作接口:int sem_init(sem_t *sem, int pshared, unsigned int value)sem:传入信号量的地址,sem_t:信号量的类型pshared:该信号量是用于线程间还是进程间(原创 2020-11-30 23:00:09 · 104 阅读 · 0 评论 -
【Linux】死锁
1.死锁当多个执行流使用同一个互斥锁的时候,有一个执行流获取到互斥锁之后,但是没有释放互斥锁,导致其他执行流卡死在加锁的接口中,我们称之为这种现象叫死锁多个执行流,在多个互斥锁的情况下,每一个执行流都占有一把互斥锁,但是还要申请对方的互斥锁,这种情况下,就会导致各个执行流阻塞掉,这种现象称之为死锁#include <stdio.h>#include <unistd.h>#include <pthread.h>#define THREADCOUN原创 2020-11-29 22:15:34 · 76 阅读 · 0 评论 -
【Linux】线程安全问题
线程不安全的现象抢票程序 线程不安全的原理结论:线程不安全会导致程序结果的出现二义性举例:① 假设现在在同一个程序当中有两个线程,线程A和线程B,并且有一个int类型的全部变量,值为10,线程A和线程B在鸽子的入口函数当中都对这样的一个全局变量进行++操作 ② 线程A拥有CPU之后,对全局变量进行++ 操作,并非原子操作,也就是意味着线程A,在执行++的过程当中有可能被打断,假设,线程A刚刚将全局变量的数值10读到CPU的寄存器当中,就被切换出去了;程序计数器当中保..原创 2020-11-26 16:20:34 · 143 阅读 · 0 评论 -
【Linux】条件变量等待的内部实现逻辑
将调用pthread_cond_wait函数的执行流放到PCB等待队列当中解互斥锁等待被唤醒 假设被唤醒之后,应该怎么做?从PCB等待队列当中移除出来抢占互斥锁情况一:拿到互斥锁,pthread_cond_wait函数就返回了情况二:没有抢到互斥锁,阻塞在pthread_cond_wait函数内部的抢锁逻辑当中一定要知道,当卡在pthread_cond_wait 内部抢锁逻辑的执行流一旦时间片耗尽,意味着当前线程被切换出来,程序计数器当中保存的就是抢锁的指令,上下文信息当.原创 2020-11-26 16:05:24 · 409 阅读 · 0 评论 -
【Linux】为什么会有互斥锁?
同步并没有保证互斥,而保证互斥是试用到了互斥锁pthread_cond_wait内部会进行解锁互斥锁先放到PCB等待队列,然后解锁原创 2020-11-26 15:57:35 · 79 阅读 · 0 评论 -
【Linux】多线程---互斥锁,同步
1.互斥想要保证互斥,我们需要用到互斥锁互斥锁本身也是一个资源,或者我们也需要在代码中来获取互斥锁,一定只要多个线程保证互斥,需要都去获取互斥锁,否则就无法保证互斥 2.互斥锁 本质:在互斥锁内部当中有一个计数器,其实就是互斥量当线程获取互斥锁的时候,如果计数器当中的值为0,表示当前线程获取不到互斥锁,也就是没有获取互斥锁,就不要在去获取临界资源了当线程获取互斥锁的时候,如果计数器当中的值为1,表示当前线程可以获取到互斥锁,也就是意味着可以访问到临界资源,代码可以执行临界区当中原创 2020-11-25 17:38:16 · 136 阅读 · 0 评论 -
Linux中常用的vim三种模式(普通模式、插入模式、底行模式)
https://blog.csdn.net/YIUECHEN/article/details/102506946vim基本概念vim共有12种模式,我们主要了解3种模式:普通模式、插入模式、底行模式:普通/正常/命令模式控制屏幕光标移动,字符、字或行的删除,移动复制某区段及进入插入模式或底行模式。插入模式只有在插入模式下才可以做文字输入,按【ESC】键可以回到普通模式这是最频繁使用的编辑模式。底行/末行模式文件的保存或退出,也可以进行文件替换,找字符串,列出行号等操作。可以从普通模式下”:“转载 2020-11-19 17:23:33 · 9350 阅读 · 2 评论 -
【Linux】Linux多线程
1.线程概念 什么是进程?在一个程序里的一个执行路线叫做线程。更准确的定义:线程是一个进程内部的控制序列一个进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程合理分配给每个执行流,就形成了线程执行流 线程的优点创建一个新线程的代价要比一个新进程小的多与进程之间的切换相比,线程之间的切换需要操作系统的工作少的多线程占用的资原创 2020-11-19 16:55:29 · 140 阅读 · 0 评论 -
【Linux】动态库和静态库
1.命令 ldd:查看当前程序依赖的动态库文件C动态库:lib.so.6 => /usr/lib64.so.6 file:可以查看当前文件属性 2.动态库 生成gcc/g++ -shared -fPIC test.c -o(后面生成的动态库的名字)前缀:lib后缀:.solibabab.so => abab称之为动态库的名字编译可执行程序的时候,一定要告诉编译器,我们链接的动态库是哪个!gcc main.c -o main指定链接动态库所在的路径:-原创 2020-11-04 21:27:53 · 185 阅读 · 1 评论 -
【Linux】基础IO
1.C语言操作文件接口 FILE *fopen(const *path, const char *mode);path:待打开的文件(文件路径+文件名称)mode:文件打开方式r:以只读方式打开,当文件不存在的时候,就会打开失败r+:以读写的方式打开,当文件不存在的时候,就会打开失败w:以只写方式打开,如果文件不存在,则创建文件。文件存在,则会截断(清空)文件w+:以读写的方式打开,如果文件不存在,则创建文件,如果文件存在,则会截断(清空)文件a:以追加方式打开,只支持写,如果文件不存在,原创 2020-10-25 23:41:48 · 161 阅读 · 0 评论 -
【Linux】linux的vim文件怎么全选复制、粘贴
1.全选全选:按住esc后,然后按ggvG全选复制:按住esc后,然后按ggyG全选删除:按住esc后,然后按dG按住ggvG d:删除选中内容 y:复制选中内容 +y:复制内容到剪切板 2.粘贴在其他的文件中的普通模式下,按p即可 3.vim中复制内容上限的问题在当前用户主目录(~) 编辑 ~/.vimrc(如果不存在,新建这个文件):set viminfo='1000,<500 它是设置寄存器保存的行数的。这样的它的复制上限就是最大原创 2020-10-19 18:42:35 · 13128 阅读 · 4 评论 -
【Linux】从Github远程仓库克隆到本地Git仓库
1.复制仓库的地址 2."git clone " + 刚才复制的东西在xshell哪里,用shift+insert粘贴地址3.克隆结束的样子原创 2020-10-10 17:48:47 · 982 阅读 · 0 评论 -
【Linux】线程安全的单例模式
1.单例模式是什么 是一种经典的,常用的,常考的“设计模式”设计模式:为了不让菜鸟拖大佬的后腿,针对一些经典的场景,作出特定的解决方案2.单例模式的特点 只应该具有一个对象(实例)3.饿汉实现方式和懒汉实现方式 > 饿汉:吃完饭,立即洗碗。提前在程序的初始化阶段完成资源的申请初始化过程优点:用的时候比较丝滑,比较流畅缺点:初始化太慢,有些资源初始化了没有用到空间换时间的思想提前初始化申请资源-----资源使用static修饰,一个类内存中只有一份资源,并且stat原创 2020-10-06 16:04:57 · 107 阅读 · 0 评论 -
【Linux】程序地址空间,分段式、分页式存储理解
文章目录1.程序地址空间二.分段式存储三.分页式存储四.缺页中断1.程序地址空间 地址:内存地址----对内存以字节为存储单元的一个编号。通过地址就可以找到对应的地址单元。 程序:一堆死代码,保存在程序文件中。编译器在编译程序生成可执行的程序文件,就会对每一条指令,每一个数据,进行一个地址编号。 程序地址空间:一个内存地址只能指向一个唯一的内存单元(一个内存执行存储一个数据)二.分段式存储 将虚拟地址的组分为段号+段内偏移量。通过对应的物理内存段其实地址,以及虚拟地址中的偏移量组成一个原创 2020-09-27 14:40:13 · 227 阅读 · 0 评论 -
【Linux】环境变量的理解
1.基本概念· 在操作系统中用来指定运行操作系统运行环境的一些参数· C/C++中链接静态库时,编译器帮我们查找相关环境变量2.常见的环境变量· PATH:指定命令的搜索路径· HOME:用户登录Linux的默认路径· SHELL:通常是bin/bash3.查看环境变量echo $NAME // NAME:你的环境变量名4.相关命令① echo:显示某个环境变量值② export:设置一个环境变量③ env:显示所有环境变量④ unset:清除环境变量⑤ set:显示本地原创 2020-09-22 08:57:43 · 232 阅读 · 0 评论 -
linux提交到github没有出现绿点的问题
最近在linux下写的代码想着提交到github上面,在github的库上面已经提交上去了,但是没有出现绿点,没有显示任何活动信息。检查自己的邮箱(1)登录自己的Github,点击Settings;(2)点击Emails,查看自己的邮箱账户(3)记住自己的邮箱(我这里采用的是163)打开linux(我习惯用shell)(1)查看本地邮箱输入的命令:git config user.email(2)修改自己的邮箱地址输入命令: git config --global user..原创 2020-08-07 21:06:11 · 322 阅读 · 3 评论