std::mutex是C++11引入的同步机制,用于保护共享数据;2. 通过定义std::mutex对象实现加锁,推荐使用std::lock_guard进行RAII管理,避免手动调用lock/unlock导致死锁。

在C++中,std::mutex 是用于保护共享数据、防止多个线程同时访问造成数据竞争的核心同步机制。它属于 C++11 标准引入的 red"><mutex> 头文件,使用起来简单但需要遵循正确模式。
std::mutex 不需要显式创建特殊对象,只需在需要保护共享资源的地方定义一个互斥量即可:
std::mutex mtx; // 全局或类成员变量中声明
这个互斥量可以是局部变量(较少见)、全局变量,更常见的是作为类的成员变量,用来保护该类中的共享状态。
立即学习“C++免费学习笔记(深入)”;
直接使用 std::mutex 的成员函数 lock() 和 unlock() 可以加锁和解锁,但不推荐手动调用,容易出错(如忘记 unlock 导致死锁)。
推荐使用 std::lock_guard 或 std::unique_lock 实现 RAII 管理,自动加锁和释放。
示例:使用 std::lock_guard 自动管理锁
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_data = 0;
void safe_increment() {
for (int i = 0; i < 100000; ++i) {
std::lock_guard<std::mutex> lock(mtx); // 构造时加锁,析构时自动解锁
++shared_data;
}
}
int main() {
std::thread t1(safe_increment);
std::thread t2(safe_increment);
t1.join();
t2.join();
std::cout << "Final value: " << shared_data << std::endl; // 正确输出 200000
return 0;
}
多个互斥量同时使用时,容易因加锁顺序不同导致死锁。解决办法包括:
示例:安全地使用多个互斥量
std::mutex mtx1, mtx2;
void thread_func() {
std::lock(mtx1, mtx2); // 同时锁住两个互斥量,不会死锁
std::lock_guard<std::mutex> lock1(mtx1, std::adopt_lock);
std::lock_guard<std::mutex> lock2(mtx2, std::adopt_lock);
// 使用共享资源...
}
基本上就这些。只要记得用 RAII 封装锁,避免手动调用 lock/unlock,就能安全有效地使用 mutex。
以上就是c++++中mutex互斥锁怎么用_mutex互斥锁的创建与使用方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号