外贸五金网站建设,wordpress短代码插件TD,公厂做网站需要开诚信通吗,互联网推广培训机构1. std::mutex 是什么#xff1f;
std::mutex 是 C 标准库中提供的 互斥锁#xff08;mutex mutual exclusion#xff09; 类型#xff0c;用于防止多个线程同时访问共享资源#xff0c;从而避免数据竞争#xff08;data race#xff09;。它属于 C11 引入的线程库
std::mutex 是 C 标准库中提供的 互斥锁mutex mutual exclusion 类型用于防止多个线程同时访问共享资源从而避免数据竞争data race。它属于 C11 引入的线程库需要头文件 mutex。所有操作系统底层的互斥机制如 POSIX pthread_mutex在 C11 中被封装成了标准类接口使用更方便更安全。 2. 头文件与定义
#include mutexstd::mutex my_mutex; // 定义一个互斥锁多个线程共享同一个 std::mutex 实例用于保护同一段共享资源。每次访问共享数据时应先 lock()访问完后要 unlock()。 3. 基本用法手动加锁 / 解锁
#include iostream
#include thread
#include mutexstd::mutex m;void safe_print(const std::string msg) {m.lock(); // 加锁std::cout msg \n;m.unlock(); // 解锁
}⚠️ 注意
如果函数中 抛出异常 或 提前返回unlock() 可能不会被调用 → 导致死锁。 4. 推荐写法使用 std::lock_guard 自动管理锁
void safe_print(const std::string msg) {std::lock_guardstd::mutex lock(m); // 构造时自动加锁析构时自动解锁std::cout msg \n;
}std::lock_guard 是 RAII资源获取即初始化 模式当 lock 离开作用域时自动释放锁自动释放资源更安全。它的构造函数会立即调用 mutex.lock()析构函数会自动调用 mutex.unlock()因此不需要手动调用 unlock()。