互斥资源加锁的实现方式

来源:互联网 发布:淘宝头像 编辑:程序博客网 时间:2024/05/16 14:59

若使用mutex.lock()方法时std::cout出现异常,则会导致mutex无法释放。改用std::lock_guard可有效避免该情况发生。

#include <iostream>#include <thread>#include <string>#include <mutex>using namespace std;std::mutex mu;// 对资源加锁/// 用lock若cout抛出异常则mu永远不会被释放/// 用lock_guard析构时自动释放void shared_print(std::string msg, int id) {       std::lock_guard<std::mutex> guard(mu); // 较好的方法       //mu.lock(); // 较差的方法       std::cout << msg << id << std::endl;       //mu.unlock();}void func_1() {       for (int i = 0; i > -100; --i) {              shared_print("from func_1 ", i);       }}class Fctor {public:       void operator()(string& s) {              for (int i = 0; i > -10; --i) {                     std::cout << "from t1: " << s << std::endl;              }              s = "factor";       }};int main() {       std::thread t1(func_1);       for (int i = 0; i < 100; ++i) {              shared_print("from main ", i);       }       t1.join();       return 0;}
原创粉丝点击