C1238888
码龄2年
关注
提问 私信
  • 博客:19,776
    19,776
    总访问量
  • 63
    原创
  • 53,458
    排名
  • 169
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2022-09-11
博客简介:

C1238888的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    471
    当月
    2
个人成就
  • 获得267次点赞
  • 内容获得3次评论
  • 获得233次收藏
创作历程
  • 13篇
    2024年
  • 49篇
    2023年
  • 1篇
    2022年
成就勋章
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

异步编程详解

如果操作未完成但时间已过,返回std::future_status::timeout,如果异步操作尚未启动(如使用std::launched::deferred策略),则返回std::future_status::deferred。行为:该策略指示std::deferred可以延迟任务的执行,直到调用std::future::get()或std::future::wait()方法时,任务才在当前线程中执行。①.std::promise的生命周期:确保std::promise对象在std:;
原创
发布博客 2024.09.01 ·
580 阅读 ·
22 点赞 ·
0 评论 ·
19 收藏

信号的捕捉

未决和阻塞可以用相同的数据类型sigset_t来存储,sigset_t 称为信号集,这个类型可以表示每个信号的"有效"或"无效"状态,在阻塞信号集中"有效"和"无效“的含义是该信号是否被阻塞,在未决信号集中"有效"和"无效"的含义是该信号是否处于未决状态。函数sigfillset初始化set所指向的信号集,使其中所有信号的对应bit置位,表示该信号集的有效信号包括系统支持的所有信号、注意: 进程处理信号的原则是串行的处理同类型的信号,不允许递归,所以同类型的多个信号同时产生,最多可以处理两个。
原创
发布博客 2024.08.31 ·
704 阅读 ·
21 点赞 ·
0 评论 ·
5 收藏

轻量级进程(LWP)和线程

对于线程的创建,我们是通过原生线程库给我们提供的应用层接口来实现的,我们要先把原生线程库加载到共享内存当中,然后在这个共享内存中创建线程,而每一个线程都在共享内存中对应一个起始地址,这里的pthread_create的第一个参数就是这里的tid,也就是一个共享内存地址。Linux下的轻量级进程是一个PCB,每个轻量级进程都有一个自己的轻量级进程ID(PCB中的pid,也就是LWP),而同一个程序中的轻量级进程组成线程组,拥有一个共同的线程组ID。而线程会与同进程的其他线程共享数据,但拥有自己的栈空间。
原创
发布博客 2024.08.31 ·
950 阅读 ·
12 点赞 ·
0 评论 ·
9 收藏

C++ std::thread join()

上面说了必须要等线程方法执行完毕后才能返回,那必然是阻塞调用线程的,也就是说如果一个线程对象在一个线程环境调用了这个函数,那么这个线程环境就会被阻塞,直到这个线程对象在构造时传入的方法执行完毕后,才能继续往下走,另外如果线程对象在调用join()函数之前,就已经做完了自己的事情(在构造时传入的方法执行完毕),那么这个函数不会阻塞线程环境,线程环境正常执行。),这个join()函数才能得到返回。d2这个线程对象调用了join()函数,因此必须等待d2的下载任务结束了,d2.join()函数才能得到返回。
原创
发布博客 2024.08.21 ·
585 阅读 ·
6 点赞 ·
0 评论 ·
9 收藏

线程常见问题

条件变量的控制判断需要使用循环进行,避免在多个线程同时被唤醒的情况下,A线程加锁成功访问资源,其他线程卡在锁处,而A线程一旦解锁,其他线程抢到锁在资源访问条件不满足的情况下访问资源。线程同步指的是线程间对数据资源进行获取,有可能在不满足访问资源条件的情况下访问资源而造成程序逻辑混乱,因此通过进行条件判断来决定线程在不能访问资源时休眠等待或满足资源后唤醒等待的线程的方式实现对资源访问的合理性。线程安全指的是当前线程中对各项操作时安全的,但不表示内部调用的函数是安全的,两个之间并没有必然关系。
原创
发布博客 2024.04.09 ·
800 阅读 ·
12 点赞 ·
0 评论 ·
11 收藏

四种锁(互斥锁,递归锁,读写锁,自旋锁)

互斥锁
原创
发布博客 2024.04.09 ·
482 阅读 ·
11 点赞 ·
0 评论 ·
6 收藏

进程间通信常见问题

11.多个进程在通过管道通信时,删除管道文件可以继续通信,管道的生命周期随进程,本质是内核中的缓冲区,命名管道文件只是标识,用于让多个进程找到同一块缓冲区,删除后,之前已经打开管道的进程依然可以通信。进程之间具有独立性,拥有自己的虚拟地址空间,因此无法通过各自的虚拟地址进行通信(A的地址经过B的页表映射不一定映射在什么位置)14.共享内存的删除操作并非直接删除,而是拒绝后续映射,只有在当前映射链接数为0时,表示没有进程访问了,才会真正被删除。4.多个进程只要能够访问同一管道就可以实现通信,不限于读写个数。
原创
发布博客 2024.02.16 ·
506 阅读 ·
9 点赞 ·
0 评论 ·
10 收藏

信号的产生

中断是计算机系统中的一种机制,用于在CPU执行指令的过程中暂停当前任务,转而执行特定的处理程序(称为中断处理程序或中断服务程序),以响应硬件或软件产生的事件或条件。操作系统中会有很多个进程,我们可以创建一个闹钟,那么其他进程也可以创建闹钟,这样就会存在很多个闹钟,那么这些闹钟是怎么管理的呢?此时就意味着硬件产生了异常。在这段代码中,有除0操作,我们知道,除0得到的是无穷大的数,所以在编程的时候是不允许出现的。随着时间片的轮转,这个导致硬件异常的进程还会不停的调到,所以操作系统会不停的向进程发送信号。
原创
发布博客 2024.02.14 ·
891 阅读 ·
19 点赞 ·
0 评论 ·
16 收藏

System V信号量

同步(Synchronization):同步是指在多进程或多线程环境中,控制进程或线程之间的执行顺序,以保证它们按照某种规定的顺序执行或在特定的时间点上进行协作。互斥(Mutual Exclusion):互斥是指在多进程或多线程环境中,对共享资源的访问是排他的,即同一时间只允许一个进程或线程访问共享资源。在执行完临界区的代码后,进程会增加信号量的值,表示释放了一个资源。表示资源数目的计数器,每一个执行流想访问公共资源内部的某一份资源,不应该让执行流先访问,而是先申请信号量资源,其实就是。
原创
发布博客 2024.02.11 ·
406 阅读 ·
12 点赞 ·
0 评论 ·
5 收藏

进程间通信-消息队列

如上图中,当读取方需要的是香蕉,但是队头是苹果,此时就可以跳过苹果,读取香蕉,并且靠近队头的香蕉先被读取。struct ipc_perm*,变量名是msg_perm,结构类型和共享内存的一样。0:读取队列中的第一条消息(不在乎当前队列头元素是什么消息类型,将他当作普通队列来处理)。当发送方有数据发送时,将数据先打包成一个节点,然后尾插到内核中的消息队列中去。当接收方接收数据时,从队列头部开始去找所需要的节点,然后进行解包得到数据。通信双方不会和消息队列进行挂接,而是像管道一样,访问内存中的消息队列。
原创
发布博客 2024.02.11 ·
462 阅读 ·
10 点赞 ·
0 评论 ·
10 收藏

system V共享内存

共享内存是最快的IPC形式(inter-process communication),一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不在涉及到内核,即进程不再通过执行进入内核的系统调用来传递彼此的数据。所以,在开辟共享内存之前,必须先使用ftok函数来生成一个独一无二的key值,这样才能保证我们内存块的标识是唯一的。由于指令也是shell上运行的进程,也是属于用户层,所以操作共享内存时,使用的时shmid,而不是key值。每次开辟的共享内存,最小也是4KB的。
原创
发布博客 2024.02.11 ·
1275 阅读 ·
27 点赞 ·
0 评论 ·
28 收藏

进程间通信-匿名管道与命名管道

进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。返回值:如果成功,返回读取的字节数,如果已到达文件末尾,则返回 0,如果出错,则返回 -1,并设置全局变量 errno 来指示错误的类型。返回值:如果成功,返回写入的字节数,如果出错,则返回 -1,并设置全局变量 errno 来指示错误的类型。我们可以看到,管道文件是可以直接在磁盘上存在的,和进程无关,这一点和命名管道不一样,其他的特征都一样。
原创
发布博客 2024.02.10 ·
1431 阅读 ·
29 点赞 ·
0 评论 ·
36 收藏

动态库与静态库 动态链接与静态链接

(ln -s/home/user/file.txt /home/user/link.txt,这个命令会在/home/user目录下创建一个名为link.txt的符号链接文件,指向/home/user/file.txt文件。将自己的动态库路径放入到环境变量中,再执行刚刚生成的可执行程序,发现可以成功执行了,而且使用的是动态库中的函数接口。当执行到库函数的时候由运行时的链接文件跳转到系统中的标准库中,去链接标准库中库函数的.o文件。静态库:库文件,以.a为后缀(Windows中为.lib)
原创
发布博客 2024.02.10 ·
2012 阅读 ·
26 点赞 ·
0 评论 ·
34 收藏

左值右值引用,完美转发

打印value的值’A’,开始下一轮递归。为了避免 构造临时对象,深拷贝进行拷贝构造,再构造的重复流程,使用移动构造,构造临时对象通过移动构造将资源转移到临时对象中,而临时对象本身又是右值(将亡值),构造的时候会将临时对象的资源转移到要构造的对象中。,它里面包含着0到N个模板参数,我们是无法直接获取参数包args,只能通过展开参数包的方式获取参数包的每个参数,语法不支持args[i]的方式获取可变参数。一般认为,可以放在=左边的,或者能够取地址的,称为左值,只能放在等号右边的,或者不能取地址的,称为右值。
原创
发布博客 2023.12.22 ·
879 阅读 ·
23 点赞 ·
0 评论 ·
24 收藏

RAII智能指针

假设我们要使用定义一个双向链表,如果我们想要让创建出来的链表的节点都定义成shared_ptr智能指针,那么也需要将节点内的_pre和_next都定义成shared_ptr的智能指针。在对象构造时获取资源,控制着对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。智能指针本质就是一个类模板,可以创建任意类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放指针所指向的空间。如果引用计数减为0,则表示自己是最后一个使用该资源的shared_ptr对象,必须释放。
原创
发布博客 2023.12.20 ·
419 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

特殊类设计

的,因为如果要调用公有函数,需要有一个对象示例,而我们要用公有函数创建一个示例,而我们现在没有对象示例,需要调用公有函数(类似鸡生蛋,蛋生鸡)…如果函数在静态区,就可以直接调用了。如果我们需要对堆上创建的对象进行销毁,我们可以提供一个公有函数接口,用这个函数接口调用私有函数。但是提供一个可以在堆上创建对象的公有函数,这样我们就可以通过公有函数来调用私有的构造函数。我们可以将析构函数私有化,因为在栈上和静态区的对象需要自动调用析构函数,而析构函数无法显示调用了,就会导致我们无法在栈上和静态区创建对象。
原创
发布博客 2023.12.10 ·
94 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

位图及有关海量数据处理

数据是否在给定的整型数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,如果为0,代表不存在。②.每个值映射一个比特位,需要开多少个比特位?并非40亿个,而是2^32个(42亿9千万),开空间开的不是数据个数,而是数据范围。①.如果用排序加二分查找,40亿个数需要16g内存,内存开不出这么大连续空间。各自映射到一个位图,如果一个值在两个位图都存在,则是交集。出现两次及以上 1 0。我们考虑使用两个位图。出现3次及以上1 1。
原创
发布博客 2023.11.25 ·
150 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++多态

虚函数的继承是一种接口继承,派生类继承的是基类虚函数的接口,目的是为了重写,达成多态,继承的是接口,所以如果不实现多态,不要把函数定义成虚函数。派生类在重写基类虚函数时,与基类虚函数返回值类型不同,即基类虚函数返回基类对象的引用或指针,派生类虚函数返回派生类对象的引用或指针。如果是普通对象,是一样快的,如果是指针对象或者是引用对象,则调用普通函数快,因为构成多态,运行调用虚函数需要到虚函数表中去查找。A有虚函数,B,C虚拟继承A,D继承B,C,也是有两张虚表,B,C共享A的虚表,D单独创建一个虚表。
原创
发布博客 2023.10.23 ·
114 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++继承

64位平台指针大小为8,B与C都是虚拟继承A,故一个A单独在D下面,大小为4,B和C内含一个虚基表指针,大小为8,还各自有一个int变量,由于这里默认对齐数为8,由于内存对齐的缘故,B和C的大小为16,只有一个A,D中还有一个int变量,故sizeof(D)为40。②.基类的私有成员在派生类都是不可见的,基类的其他成员在子类的访问方式=min(成员在基类的访问限定符,继承方式)public>protected>private。组合是一种has-a的关系,假设B组合了A,每个B对象中都有一个A对象。
原创
发布博客 2023.10.22 ·
133 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

迭代器失效问题

迭代器失效是一种现象,由特定操作引发,这些特定操作对容器进行操作,使得迭代器不指向容器内的任何元素,或者使得迭代器指向的容器元素发生了改变。
原创
发布博客 2023.08.15 ·
445 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多