
C++
文章平均质量分 58
小小蚂蚁fcy
这个作者很懒,什么都没留下…
展开
-
多线程写作利器之std::condition_variable
然而,是否会出现“惊群现象”(thundering herd problem),即多个线程被唤醒但只有一个能继续执行,这取决于操作系统的线程调度和实现细节。一起使用,因为等待(wait)操作需要原子地释放互斥锁并使线程进入睡眠状态,当条件变量被通知时,等待的线程被唤醒,然后重新获取互斥锁。为了减少惊群现象的影响,开发者可以采取一些策略,比如使用更细粒度的锁,或者重新设计程序逻辑以减少对条件变量的依赖。可能实际上会导致所有等待的线程都被短暂地唤醒,但只有一个线程能成功重新获取互斥锁并继续执行。原创 2024-07-18 15:16:11 · 410 阅读 · 0 评论 -
高性能编程之std::this_thread::yield(),不要只会让线程傻等
线程执行条件不满足,你只会让线程傻等吗?不如发扬一下风格,无私一点,把CPU时间片让给其它线程使用,这样能够提高程序性能。是C++11标准库中的一个函数,它位于头文件中。该函数的目的是让当前线程放弃CPU的执行权,即主动让出CPU时间片,让操作系统调度其他线程执行。这通常用于提高多线程程序的性能,特别是在线程处于忙等待(busy waiting)状态时,通过调用yield()可以减少CPU的浪费,因为忙等待会不断消耗CPU资源而不做任何有用的工作。原创 2024-07-18 15:13:37 · 868 阅读 · 0 评论 -
Linux下自动生成c++ UML图
在打开的网页中,可以看到生成的文档目录和各个文档页面的链接。Doxygen是一个用于从注释的C++源代码中生成文档的工具,支持多种编程语言,包括C,Objective-C,C#,PHP,Java,Python等。需要注意的是,图形化表示的内容具有交互性,可以进行缩放、拖动等操作,便于优化代码架构。Doxygen会自动在配置文件中指定的目录中生成一些文件,包括HTML文档、图片、配置文件等。在生成文档后,进入生成的文档目录,用firefox浏览器打开想要查看文件。RECURSIVE递归子目录。原创 2023-11-10 16:15:19 · 641 阅读 · 1 评论 -
虚函数可以用inline吗?
如果虚函数通过对象被调用,倒是可以inlined,但大部分虚函数调用动作是通过对象的指针或引用完成的,此类行为无法被inlined。inlined意味着编译期将调用端的调用动作被函数本体取代,若无法知道哪个函数该被调用时,编译器没法将该函数加以inlining。 (more effective C++ )inline virtual确实有碰到过,无论显式还是隐式,inline都只是一个申请,最终由编译器决定内联还是不内联。具体点,先说不适合内联的情况:1,编译器会保证多态性,但是多态的时候就不原创 2021-10-22 16:09:46 · 1115 阅读 · 0 评论 -
JSON是什么?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。那么,JSON到底是什么?JSON就是一串字符串 只不过元素会使用特定的符号标注。{} 双括号表示对象[] 中括号表示数组"" 双引号内是属性或值: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象而[{"name": "M原创 2021-08-31 14:42:56 · 257 阅读 · 0 评论 -
C++ 字符串详解
目录前言1.动态字符串1.1.C风格的字符串1.1.1.易错点1.1.2.strcpy()1.1.3.strcat()1.1.4.对字符串用sizeof()关键字或者strlen()函数的区别1.1.5.安全C库1.2.字符串字面量1.2.1.字面量1.2.2.原始字符串字面量1.3.C++ std::string类1.3.1.有C的字符串,为什么还有C++的字符串?1.3.2.使用string类1.3.3.std::string字面量1.3.4.高级数值转换1.3.5.低转载 2021-08-06 15:59:43 · 623 阅读 · 0 评论 -
Linux进程锁方案(内附代码封装)
1)互斥锁多进程之间同步可以用互斥锁进行实现,默认情况下,互斥锁的属性是在一个进程的多线程使用的。多进程因为分开之后内存是相对独立的,所以要实现进程间互斥锁,必须要把互斥锁放在共享内存里使用,在 pthread_mutex_init 初始化之前,修改其属性为进程间共享,即设置互斥锁的属性为PTHREAD_PROCESS_SHARED。但是,如果某个进程在获得了锁之后崩溃并且未释放锁,则其他进程会阻塞造成死锁,但是文件锁,则会自动释放该锁。2) 文件锁借助 fcntl 函数来实现文件锁,可原创 2021-07-31 15:48:38 · 1608 阅读 · 0 评论 -
多线程中的信号量
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有 A,B 两个线程,B 线程要等 A 线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。信号量(信号灯)与互斥锁和条件变量的主要不同在于” 灯” 的概念,灯亮则意味着资源可用,灯灭则意味着不可用。信号量主要阻塞线程,不能完全保证线程安全,如果要保证线程安全,需要信号量和互斥锁一起使..原创 2021-07-31 15:55:06 · 2167 阅读 · 0 评论 -
线程池的应用
线程池原理简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图:线程池的实现原理:线程池的组成主要分为 3 个部分,这三部分配合工作就可以得到一个完整的线程池:任务队列,存储需要处理的任务,原创 2021-07-31 15:52:13 · 318 阅读 · 0 评论