
c++
luoganttcc
微信:luogantt2
展开
-
C++ 中的互斥锁
Mutex 代表互斥。在 C++ 中,std::mutex 类是一个同步原语,用于保护共享数据不被多个线程同时访问。共享数据可以是变量、数据结构等形式。std::mutex类在 C++ 中实现互斥锁。它在头文件中定义。C++ 中需要互斥锁在 C++ 中,当多个线程同时修改相同的共享资源时,可能会引起竞争条件。它可能会在执行程序时产生不可预测的输出或意外行为。互斥锁用于通过锁定当前线程来避免竞争条件,以便所有其他线程当时无法访问共享资源,并在当前线程完成时解锁它。C++ 中 Mutex 的语法。原创 2025-02-21 19:30:34 · 409 阅读 · 0 评论 -
C++ 多线程 三种方式创建线程
【代码】C++ 多线程 三种方式创建线程。原创 2025-02-21 16:21:10 · 91 阅读 · 0 评论 -
c++多线程 通过类中的 operator() 方法定义函数对象来创建线程
【代码】c++多线程 通过类中的 operator() 方法定义函数对象来创建线程。原创 2025-02-21 16:12:29 · 111 阅读 · 0 评论 -
C++ 多线程 通过函数指针创建线程
【代码】C++ 多线程 通过函数指针创建线程。原创 2025-02-21 16:10:21 · 103 阅读 · 0 评论 -
c++多线程
通过 std::memory_order 控制原子操作顺序(如 memory_order_relaxed 或 memory_order_seq_cst)。:<thread>(线程)、<mutex>(互斥锁)、<atomic>(原子操作)、<condition_variable>(条件变量)。:用 std::shared_ptr 或 std::weak_ptr 管理资源。:如 std::lock_guard 或 std::unique_lock。:子线程独立运行,失去控制权(慎用,需确保资源生命周期)。原创 2025-02-21 16:07:00 · 990 阅读 · 0 评论 -
智能指针是线程安全的吗?
当我们向另一个线程传递智能指针的引用时,由于use count并没有加1,在shptr析构时直接销毁了管理的Foo实例,所以在线程中执行shptr->print()会引发coredump。这里需要在shared_ptr构造时传入deleter,用来销毁持有的数组,而unique_ptr无需此操作,因为unique_ptr重载了unique_ptr(T[])。聪明的小伙伴,想想如果多次调用get_foo()会发生什么?知道在释放资源的时候shread_ptr和unique_ptr有什么不同吗?原创 2025-02-21 15:23:39 · 237 阅读 · 0 评论 -
什么是智能指针
【代码】什么是智能指针。原创 2025-02-21 15:21:15 · 83 阅读 · 0 评论 -
c++ 野指针 如何理解,举例说明
首先,野指针的定义是指向无效内存区域的指针,这些区域可能是未初始化的、已释放的或越界访问的。我需要明确野指针的几个典型场景,比如未初始化的指针、释放后未置空的指针、以及指针越界。现在需要将这些信息组织成自然的中文回答,避免使用Markdown,用口语化的方式解释,并给出具体代码示例。参考内容中的例子如未初始化的指针赋值,或者释放内存后继续使用指针,这些都需要在举例中体现。在 C++ 中,野指针是指指向无效内存地址的指针,可能导致程序崩溃、数据损坏或不可预测的行为。局部变量作用域结束后,指针仍指向其原地址。原创 2025-02-14 01:06:15 · 486 阅读 · 0 评论 -
如何避免死锁
持有锁1请求锁2,进程B持有锁2请求锁1时,两者都不会释放自己的锁,两者都需要对方的锁,就会造成死锁。二师兄:在C++中,锁(Lock)是一种同步工具,用于保护共享资源,防止多个线程同时访问,从而避免数据竞争和不一致。二师兄:在C++11之前,C++便准层面并没有定义锁,锁的应用要依赖于平台。1.避免循环等待,如果需要在业务中获取不同的锁,保证所有业务按照相同的顺序获取锁。(资源获取即初始化)技术实现的锁,支持自动上锁,自动解锁。2.使用超时锁,当锁超时时,自动释放锁。二师兄:从种类上分,可以分为普通锁、原创 2025-02-14 00:50:54 · 736 阅读 · 0 评论 -
vector了解吗
时,需要开辟一块更大的动态数组,并把旧动态数组上的元素搬移到当前动态数组,然后销毁旧的动态数组。删除数据时,被删除数据后面的数据依次向前移一位。二师兄:迭代器失效主要有两种情况引起:1.插入数据。面试官:你知道新开辟的动态数组的容量是就数组的多少倍比较合适?这样在后续的数据插入时就不会因为频繁的。记录当前元素的数量和当前动态数组的容量。二师兄:有的,如果知道数据的大概量,我们可以使用。二师兄:这个值在不同的编译器上不是固定的。被用尽而导致的多次的数据搬移,从而提升。返回当前插入的值的引用,而。原创 2025-02-14 00:45:50 · 241 阅读 · 0 评论 -
c++ 实现矩阵乘法
矩阵乘法的基本实现方法是三层循环,但不同的循环顺序会影响性能,比如i-j-k和i-k-j的顺序。然后,参考内容里提到了一些优化方法,比如调整循环顺序来提高缓存命中率,使用一维数组存储矩阵,或者利用SIMD指令如AVX进行向量化加速。还有用户可能关心的是如何设计一个矩阵类,或者是否需要使用现有的库如Eigen或BLAS。首先,我应该从基础实现开始。最基本的矩阵乘法需要三个嵌套循环,遍历行、列和中间维度进行累加。参考内容中的例子大多使用了这种结构。原创 2025-02-13 12:52:43 · 994 阅读 · 0 评论 -
Eigen 生成 随机 矩阵
【代码】Eigen 生成 随机 矩阵。原创 2025-02-13 12:43:29 · 92 阅读 · 0 评论 -
c++ 生成随机矩阵,并且打印
【代码】c++ 生成随机矩阵,并且打印。原创 2025-02-12 23:36:52 · 100 阅读 · 0 评论 -
C++ 中的 Const 关键字(1)
C++ 中的 Const 关键字最后更新: 2024 年 8 月 6 日本文讨论了C++中const 关键字的各种功能。只要将const 关键字附加到任何方法 ()、变量、指针变量以及类的对象上,它就会阻止特定对象/方法 ()/变量修改其数据项的值。原创 2025-02-12 21:03:36 · 226 阅读 · 0 评论 -
C++ 模板常见特性(函数模板、类模板)
为了多快好省地定义出一批相似的类,可以定义「类模板」,然后由类模板生成不同的类。template //类型参数表class 类模板名成员函数和成员变量类模板名 对象名(构造函数实参表);原创 2025-01-06 10:36:42 · 834 阅读 · 0 评论 -
c++ auto
intmain()1.auto自动识别类型//typeid()识别变量类型2.auto关键字经常和范围for一起使用,用来遍历数组。普通的遍历数组++i)范围for:自动迭代,自动结束依次取arr中的元素,赋值给变量i(注意i是arr中元素的拷贝)原创 2025-01-06 07:04:54 · 956 阅读 · 0 评论 -
malloc函数和calloc函数的区别是什么?
就像刚才提到的用 calloc 分配存放双精度浮点数的内存,分配完成后,每一个双精度浮点数元素的初始值都会是 0 ,这种初始化特性使得 calloc 在一些需要初始数据为 0 的场景中非常实用,比如用于统计计数的数组,使用 calloc 分配内存后就可以直接基于初始的 0 值开始进行计数等操作了,无需额外再去初始化内存空间。,其中 5 是元素个数, sizeof(double) 是每个双精度浮点数元素的字节大小, calloc 函数会根据这两个参数来确定要分配的总内存量。原创 2025-01-05 18:30:44 · 434 阅读 · 0 评论 -
幸运数代码
【代码】幸运数代码。原创 2024-12-06 21:42:23 · 118 阅读 · 0 评论 -
构造与析构
c++ 的全局对象的构造函数 在 main 之前实行 c++ 的全局对象的析构函数在 main 之后执行。原创 2022-09-20 13:39:49 · 218 阅读 · 0 评论 -
nm 查看文件的符号表
【代码】nm 查看文件的符号表。原创 2022-09-20 10:29:22 · 345 阅读 · 0 评论 -
真正了不起的程序员对自己程序的每一个字节都了如指掌
真正了不起的程序员对自己程序的每一个字节都了如指掌。原创 2022-09-19 19:59:17 · 119 阅读 · 0 评论 -
C语言之父Dennis Ritchie告诉你:如何成为世界上最好的程序员?
文/译/网易云信想要阅读更多技术干货文章,欢迎关注。了解,来自网易核心架构的通信与视频云服务。我不知道如何成为世界上最好的程序员。但是,我们可以向历史上最伟大的程序员学习。该系列文章将会向大家分享C语言的创造者、Unix操作系统的关键开发者Dennis Ritchie、。Linux内核的发明人Linus Torvalds的经历与建议。获得计算机编程学位的前几天,Dennis Ritchie获得了在麻省理工学院(麻省理工学院)工作的机会。转载 2022-09-17 19:42:05 · 578 阅读 · 0 评论 -
GDB调试之段信息
为了更好的调试程序,需要对程序编译后产生的库或可执行程序有一定的了解,本文主要介绍一下其中的段信息。转载 2022-09-16 12:08:12 · 1188 阅读 · 0 评论 -
基础篇:lvalue,rvalue和move
如果v1和v2我们都需要的话,生成两份拷贝自然是没有问题的,但多数情况下我们只希望使用v2,那么我们就只希望生成一份拷贝,减少不必要又麻烦的拷贝过程:设想如果它包含10000个元素,要增加多大的开销?它们通常是一个直接的数值,运算符返回的数值,或是函数的返回值,或者通过隐式类型转换得到的对象,大部分字面值(e.g., 10 and 5.3)也是rvalues。这种时候,类型声明当中的“任何可以通过它的名字,指针或者引用来接触的变量都是lvalue,例如定义的某个变量和函数的参数, 对一个表达式取地址。转载 2022-09-14 15:59:22 · 572 阅读 · 0 评论 -
C goto 语句
【代码】C goto 语句。原创 2022-09-09 16:04:36 · 162 阅读 · 0 评论 -
linux 函数 堆栈
这次又把foo函数的ebp压栈保存,然后给ebp赋了新值,指向bar函数栈帧的栈底,通过ebp+8和ebp+12分别可以访问参数c和d。在gdb中可以用bt命令和frame命令查看每层栈帧上的参数和局部变量,现在可以解释它的工作原理了:如果我当前在bar函数中,我可以通过ebp找到bar函数的参数和局部变量,也可以找到foo函数的ebp保存在栈上的值,有了foo函数的ebp,又可以找到它的参数和局部变量,也可以找到main函数的ebp保存在栈上的值,因此各层函数栈帧通过保存在栈上的ebp的值串起来了。...原创 2022-08-31 15:19:01 · 635 阅读 · 0 评论 -
3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图
link原创 2022-08-27 21:28:00 · 93 阅读 · 0 评论 -
cmake 添加头文件目录,链接动态、静态库
link最近需要将Windows10系统下使用VS2017编译的VC++项目放到CentOS Linux服务器上跑,最简单的当然是使用cmake作为项目编译和管理工具了,这样就不需要写makefile了,使用cmake管理编译项目相对来说比较简单。遇到一个问题就是,由于我在CentOS7服务器上用的是普通用户账号,一些第三方库比如Boost库、yaml-cpp、mariadb、mariadb++、hiredis库放到一个统一的目录下比如/opt/env目录,而不是常见的/usr/、/usr/local等目录原创 2022-08-27 21:28:25 · 3614 阅读 · 0 评论 -
cmake configure_file 评价
案例说明源码原创 2022-08-27 21:28:35 · 99 阅读 · 0 评论 -
cmake cpack打包代码
第 7 步:打包安装程序¶。原创 2022-08-27 21:28:53 · 213 阅读 · 0 评论 -
CMake 菜鸟升级指南
当前文件路径 ${CMAKE_CURRENT_SOURCE_DIR} # 安装路径 ${CMAKE_INSTALL_PREFIX} # 默认值为 /usr/local # 项目编译路径 ${PROJECT_BINARY_DIR} # 项目名 ${PROJECT_NAME} # 项目路径,值参照下面PROJECT指令说明 ${PROJECT_SOURCE_DIR}原创 2022-08-27 21:29:06 · 324 阅读 · 0 评论 -
cmake --build 与 make
link原创 2022-08-27 21:29:25 · 114 阅读 · 0 评论 -
cmake 生成静态库 并且 将静态库链接到主函数
【代码】cmake 生成静态库 并且 将静态库链接到主函数。原创 2022-08-27 21:29:34 · 107 阅读 · 0 评论 -
cmake if-else- else-endif 条件语句
【代码】cmake if-else- else-endif 条件语句。原创 2022-08-28 22:57:58 · 95 阅读 · 0 评论 -
CMake 常用命令
cmake是现在主流的用于多平台C++构建系统,本文用来记录cmake的一些常用命令的索引,加上一些自己理解,理解有误的话,欢迎大家指出。原创 2022-08-28 22:58:06 · 1618 阅读 · 0 评论 -
cmake 显示选项
【代码】cmake 显示选项。原创 2022-08-28 22:58:15 · 97 阅读 · 0 评论 -
cmake 切换构建类型
CMake可以配置构建类型,例如:Debug、Release等。配置时,可以为Debug或Release构建设置相。是 CMAKE_BUILD_TYPE。关的选项或属性,例如:编译器和链接器标志。控制生成构建系统使用的配置变量。原创 2022-08-28 22:58:31 · 97 阅读 · 0 评论 -
cmake为语言设定标准
【代码】cmake为语言设定标准。原创 2022-08-28 22:58:53 · 218 阅读 · 0 评论 -
cmake 检测操作系统
CMake是一组跨平台工具。不过,了解操作系统(OS)上执行配置或构建步骤也很重要。相关的CMake代码,会根据操作系统启用条件编译,或者在可用或必要时使用特定于编译器的扩展。示例中,我们将通过一个不需要编译任何源代码的示例,演示如何使用CMake检测操作系统。起见,我们只考虑配置过程。...原创 2022-08-28 22:59:05 · 106 阅读 · 0 评论 -
cmake 处理与平台相关的源代码
");");");#else");#endif}}原创 2022-08-28 22:59:13 · 93 阅读 · 0 评论