std::unique_lock 简单用法
std::unique_lock 是 c++ 标准库中的互斥锁封装类,与 std::lock_guard 类似,也可以自动管理互斥量的上锁和解锁操作,但提供了更高级的锁定机制,支持可延迟和可中断的锁定、多个互斥量的锁定等特性,更加灵活和可控。 示例 #include <mutex> #include <iostream> std::mutex mtx; bool...
std::unique_lock 是 c++ 标准库中的互斥锁封装类,与 std::lock_guard 类似,也可以自动管理互斥量的上锁和解锁操作,但提供了更高级的锁定机制,支持可延迟和可中断的锁定、多个互斥量的锁定等特性,更加灵活和可控。 示例 #include <mutex> #include <iostream> std::mutex mtx; bool...
std::lock_guard 是 c++ 标准库中的 RAII 类模板,用于在作用域内自动管理互斥量的上锁和解锁操作,确保在离开作用域时正确释放互斥量,避免忘记解锁而导致的死锁问题。 示例 #include <mutex> #include <iostream> std::mutex mtx; // 使用 lock_guard 前 unlock无法被调用 #...
std::mutex 是 c++ 里的一个互斥锁, 用于实现线程间的互斥访问,确保共享资源的安全性。在使用时,一旦 A 线程 lock 后,其他线程如果调用 lock 便会阻塞等待,直到 A 线程 unlock,其他线程如果不想阻塞等待,可以调用 try_lock, 它会尝试lock,失败后便返回。 示例 #include <mutex> #include <iostr...
在 rust 语言中,有时候使用 ref 来创建一个引用,有时候使用 & 来创建一个引用,二者有什么区别? 详解 其实在 rust 2018 版本中,通常不需要显式地使用 ref 关键字,直接使用 & 来借用值,ref 主要在 rust 的早期版本中更常用,但在现代 rust 中,直接使用 & 更加普遍和推荐。不过,ref 在某些复杂的模式匹配场景中仍然可以使用,...
在 linux 环境开发中,有时候需要开机自动执行某个命令,但是由于执行该命令需要 root 权限,所以会执行失败,下面分享一种免密执行的实现方式。以 sudo ifmetric wlan0 0(切换 wlan0 的路由优先级为最高级别)为例。 详细步骤 终端运行 sudo visudo 修改 /etc/sudoers 配置,添加如下代码 my_username ALL = NOPAS...
c++ 中的优先级队列是基于堆实现的,可以快速地插入新元素,并能够快速地取出当前优先级最高(或最低)的元素。优先级队列在 头文件中定义,是标准模板库的一部分。 使用优先级队列之前,需要包含 头文件,并且可以自定义存储的元素类型和元素之间的比较方式。如果不指定比较方式,默认使用 std::less ,元素会按照从大到小的顺序排列,最大元素优先。 基本使用 不指定优先级的比较方式,采用默...
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在 c++ 中,可以通过使用静态成员变量和静态成员函数来实现单例模式。通过将构造函数设置为私有,限制了类的实例化,然后通过静态成员函数返回类的唯一实例,确保在整个程序中只有一个实例被创建和访问。这种模式在需要全局共享的资源、配置信息或对象管理等场景下非常有用。单例模式分为懒汉式和饿汉式: 饿汉式,实例在进入 ma...
在开发过程中,有时候需要测试某个函数或者代码片段的耗时情况,所以我使用 RAII 机制实现一个记录程序耗时的类。 代码实现 // c++ 中提供了一个计时的模板 std::chrono, 里面有三种时钟: steady_clock, system_clock 和 high_resolution_clock。 // steady_clock 类似秒表, 适合用于记录程序耗时; // sys...
最近的业务中需要用到 std::any,但编译器版本又太低,于是自己实现了一个(参考 llvm),用法参见std::any的用法,前面有介绍过。 代码实现 // c++14 才有这个头文件,所以可以自己实现一个,或者使用 new #include "make_unique.h" #include <iostream> #include <memory> #inc...
std::variant 是 c++17 引入的标准库类,它提供了一种类型安全的机制,可以在编译时定义一个可以存储多种类型的变量。通过std::variant,我们可以在运行时将值存储在一个可变的、类型安全的容器中,并在需要时进行类型转换和访问,从而实现更灵活的编程。和 union 类似。 示例 #include <iostream> #include <variant...