0
#include <iostream>
#include <mutex>

using namespace std;

class TestClass {
    public : // members
        std::mutex m_mutex;
        int m_var;
    public : //functions
        TestClass()
          :m_var(0) {};

        void fooIncVar()
        {
            cout << "calling inc var" << endl;
            std::scoped_lock lock(m_mutex);
            _incVar();
        }
        
    private:
        void _incVar() 
        {
            std::scoped_lock lock(m_mutex);
            m_var++;
            cout << "var : " << m_var << endl; 
        }
    
};

int main()
{
    cout<<"Hello World" << endl;
    auto a = A();
    a.fooIncVar();
    return 0;
}

我试图了解 scoped_lock 如何与互斥锁一起使用。我期待下面的程序会挂起,因为我_incVar通过持有互斥锁来调用,fooIncVar因为变量的范围直到函数结束。但情况似乎并非如此。我得到以下输出

Hello World                                                                                                                                                                                                             
calling inc var                                                                                                                                                                                                         
var : 1  
4

0 回答 0