然后我们不需要修改类来访问这个结构体,我们创建一个封装器:
- struct ConcurrentCounter { std::mutex mutex;
- Counter counter;
- void increment(){ mutex.lock();
- counter.increment(); mutex.unlock();
- }
- void decrement(){ mutex.lock();
- counter.decrement(); mutex.unlock();
- } };
大部分时候该封装器运行挺好,但是使用 decrement 方法的时候就会有异常发生。这是一个大问题,一旦异常发生后,unlock 方法就没被调用,导致互斥量一直被占用,然后整个程序就一直处于堵塞状态(死锁),为了解决这个问题我们需要用 try/catch 结构来处理异常情况:
- void decrement(){ mutex.lock();
- try { counter.decrement();
- } catch (std::string e){ mutex.unlock();
- throw e; }
- mutex.unlock(); }










