
Linux c/c++
文章平均质量分 73
932我
这个作者很懒,什么都没留下…
展开
-
简单的客户端服务器(多线程)基于json通信
基于json的网络通信原创 2023-01-09 21:28:38 · 721 阅读 · 0 评论 -
json工具
json工具原创 2023-01-08 16:43:35 · 942 阅读 · 0 评论 -
YAZI序列化工具
序列化原创 2022-12-31 14:35:39 · 496 阅读 · 0 评论 -
QT和linux服务器跨平台通信
windos 和 linux的通信原创 2022-10-22 22:17:52 · 1441 阅读 · 0 评论 -
线程安全的单例模式其他各种常见的锁
什么是单例模式 单例模式是一种 "经典的, 常用的, 常考的" 设计模式什么是设计模式 IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大 佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是 设计模式。单例模式的特点 某些类, 只应该具有一个对象(实例), 就称之为单例. 例如一个男人只能有一个媳妇. 在很多服务器开发场景中, 经常需要让服务器加载很多的数据 (上百G) ..原创 2022-05-25 21:34:48 · 115 阅读 · 0 评论 -
多线程---线程池
线程池: * 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着 监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利 用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 * 线程池的应用场景: * 1. 需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使用线程池技 术是非常合适原创 2022-05-25 20:03:54 · 138 阅读 · 0 评论 -
POSIX信号量
POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。初始化信号量#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); 参数:pshared:0表示线程间共享,非零表示进程间共享 value:信号量初始值销毁信号量int sem_destroy(sem_t *sem);等待信号.原创 2022-05-22 17:32:16 · 241 阅读 · 0 评论 -
基于阻塞队列的生产者消费者模型
收到前几天有的小伙伴提出的疑问,你生产者消费者模型有什么作用,生产者生产一个数据,消费者消费一个数据,这有什么作用呀。那么小编就在之前的基础上增加一点难度,生产者创建一个字符串,消费者翻译一个字符串,当然我用的在阻塞队列中加入的任务。代码如下:BlockQueue.hpp#include <iostream>#include <unistd.h>#include <pthread.h>#include <queue>namespace Ns原创 2022-05-22 15:24:06 · 1049 阅读 · 0 评论 -
linux线程同步--生产者消费者模型
我们先回顾上节我们说到的互斥锁代码如下:#include<iostream>using namespace std;#include<unistd.h>#include<pthread.h>#define NUM 5class Ticket{private: size_t tickets; pthread_mutex_t mutex;public: Ticket() :tickets(1000) //10.原创 2022-05-12 17:13:19 · 739 阅读 · 0 评论 -
线程-------互斥
进程线程间的互斥相关背景概念 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用 原子性(后面讨论如何实现):不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成同步:一般而言,让访问临界资源的过程在安全的前提下(一般都是互斥和原子的),让访问资源具有一定的顺序性(具有合理性)互斥量mutex大部分情况,线程使用的原创 2022-05-11 16:41:30 · 1075 阅读 · 0 评论 -
Linux线程概念
1. Linux线程概念 什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程 执行流一个进程内存存在多个线程?可能进程:线程 1:n的关系,是操作系统中是否存在多个..原创 2022-05-07 17:12:40 · 659 阅读 · 0 评论 -
Linux信号补充
上节我们讲了Linux信号产生前,产生中,产生后如图:我们还学习到了一个函数接口sigprocmask()int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);sigset_t * set 是修改bolck,odlset是老得block表我们还学习到了信号处理整个流程图:下面就是今天的重点1.可重入函数 我们先看以例子,就能理解什么是可重入函数当我们进行头插的时候,此时收到信号处理,信原创 2022-05-07 13:21:40 · 224 阅读 · 0 评论 -
Linux信号捕捉
1.上节回顾上节主要学习了信号发送前,信号发送中。1.信号发送前信号产生的方式:1.键盘 2.进程异常 3.系统调用 4.软件条件附加:1.信号产生的方式有非常多,但是最终发送都是由OS统一发送2.core dump && waitpid-> core dump flag3.信号发送之后,不是被立即处理的,而是在合适的时候a.进程就需要有保存信号的能力b.“合适”:是什么时候?2.信号发送中需要记住一张最重要的图pending原创 2022-05-04 20:01:26 · 1079 阅读 · 0 评论 -
Linux进程信号
信号入门1. 生活角度的信号你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时, 你该怎么处理快递。也就是你能“识别快递” 当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。那 么在在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的行为并不 是一定要立即执行,可以理解成“在合适的时候去取”。 在收到通知,再到你拿到快递期间,是有一个时间窗口的,在这段时间,你并没有拿到快递,但是你知 道有一个快原创 2022-04-29 09:55:50 · 617 阅读 · 0 评论 -
Linux进程间通信———共享内存
IP【前两节我们讲的都是基于文件的通信方式(匿名管道和命名管道),今天我们将System V标准的进程间通信方式在OS层面专门为进程间通信设计了一个方案,谁设计,xdm当然是计算机科学家和程序员(顶尖)。那么设计这个方案要不要给用户用,当然要给用户用,不然设计这个方案有什么意义。但是操作系统不相信任何用户,给用户提供功能的时候,采用系统调用!System V进程间通信,一定会存在专门同来通信的接口(System call)进程间通信的本质是让不同的进程看到同一块资源。System V原创 2022-04-22 18:25:51 · 1845 阅读 · 0 评论 -
Linux进程间通信 -----------------命名管道
上节我们讲了匿名管道,匿名管道是用于具有亲缘关系的进程进行通信的方式。其特点是子进程继承父进程的属性,继承了文件描述表中的信息---打开的文件。而命名管道通信方式是让磁盘上的一个文件,加载到内存,让通信的进程都能看到同一块资源。具体如下图:接下来我们看一看匿名管道的创建过程,具体如下图:接下来我们就要将本节重点-------命名管道我们先看一个命令行的命名管道通信的实例:我们创建一个管道文件 : mkfifo pipc.一个进程向pipc中写,一个从pipc中..原创 2022-04-21 17:36:09 · 1849 阅读 · 0 评论 -
进程间通信----管道
1,进程间通信的方式1,管道2,消息队列3,共享内存4,信号量2.进程间通信目的:1)数据传输:一个进程需要将它的数据发送给另一个进程2)资源共享:多个进程之间共享同样的资源。3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止 时要通知父进程)。4)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变3,进程间通信发展管道原创 2022-04-18 15:30:04 · 298 阅读 · 0 评论 -
Linux 文件描述符与重定向
1.什么是文件描述符文件描述就是打开文件内核数据结构,返回给用户的一个整数。 #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include <fcntl.h> int main() { int fd = open("./log.txt",O_原创 2022-04-06 15:32:19 · 1802 阅读 · 0 评论 -
Linux exec族函数替换
hi,今天我们来学习一下linux函数execv族的函数,这些函数实现的是进程的替换,我们先研究下什么事进程替换所以在实现程序的替换,需要先一个进程,下面我先学习第一个函数借口,int execl(const char *path, const char *arg, ...);//这个一个可变参数列表的函数,一个参数是文件路径,后面是选项;这里可以看到效果,我执行我自己的程序myexe,在myexe.c中调用execl程序替换函数,程序执行ls -a -l -i命令,有...原创 2022-03-27 20:40:14 · 925 阅读 · 0 评论