本文介绍: 用于自动管理互斥量的锁定和解锁,提供了一种安全、简洁且异常安全的方式来处理多线程中的同步问题。通过它的构造函数和析构函数,它能保证互斥量在进入和离开作用域时自动加锁和解锁,从而避免了忘记解锁互斥量导致的潜在问题。是 C++ 标准库中的一个实用工具,用于简化互斥量的管理。它提供了一个异常安全的方式来锁定和自动解锁互斥量。用于保护标准输出流,确保在多线程环境中输出不会交叉或混乱。锁定互斥量,以确保在添加数据的过程中不会有其他线程同时修改。当函数结束,即离开作用域时,锁会自动释放。每当一个线程尝试添加数据到。
文章目录
std::lock_guard
是 C++ 标准库中的一个实用工具,用于简化互斥量的管理。它提供了一个异常安全的方式来锁定和自动解锁互斥量。
示例 1:基本用法
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx; // 全局互斥量
void printEven(int num) {
std::lock_guard<std::mutex> guard(mtx); // 在作用域开始时自动加锁
if (num % 2 == 0) {
std::cout << num << " is even." << std::endl;
}
// 离开作用域时,guard会自动解锁mtx
}
void printOdd(int num) {
std::lock_guard<std::mutex> guard(mtx);
if (num % 2 != 0) {
std::cout << num << " is odd." << std::endl;
}
}
int main() {
std::thread t1(printEven, 2);
std::thread t2(printOdd, 3);
t1.join();
t2.join();
return 0;
}
在这个例子中,std::lock_guard
用于保护标准输出流,确保在多线程环境中输出不会交叉或混乱。当进入 printEven
或 printOdd
函数时,std::lock_guard
会自动锁定互斥量 mtx
。当函数结束,即离开作用域时,锁会自动释放。
示例 2:保护共享资源
#include <iostream>
#include <mutex>
#include <vector>
#include <thread>
std::mutex mtx; // 全局互斥量
std::vector<int> shared_data; // 共享资源
void addData(int data) {
std::lock_guard<std::mutex> guard(mtx);
shared_data.push_back(data);
std::cout << "Data added: " << data << std::endl;
}
int main() {
std::thread t1(addData, 10);
std::thread t2(addData, 20);
t1.join();
t2.join();
return 0;
}
在这个例子中,std::lock_guard
用于保护对共享资源 shared_data
的访问。每当一个线程尝试添加数据到 shared_data
时,它会通过 std::lock_guard
锁定互斥量,以确保在添加数据的过程中不会有其他线程同时修改 shared_data
。
小结
在这两个例子中,std::lock_guard
用于自动管理互斥量的锁定和解锁,提供了一种安全、简洁且异常安全的方式来处理多线程中的同步问题。通过它的构造函数和析构函数,它能保证互斥量在进入和离开作用域时自动加锁和解锁,从而避免了忘记解锁互斥量导致的潜在问题。
原文地址:https://blog.csdn.net/qq_21950671/article/details/135562398
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_55526.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。