如何将全局数据及其互斥锁锁定为参考对象?

问题描述

有人可以解释下面的代码有什么问题吗?

struct CSection {
    CSection( pthread_mutex_t* mP )     {
        m_lockPtr = mP;
        pthread_mutex_lock( m_lockPtr );
    }
    ~CSection()     {
        pthread_mutex_unlock( m_lockPtr );
    }

    pthread_mutex_t* m_lockPtr;
};

////////////////MAIN CODE ///////////////////
std::list<ABC> gMap;
pthread_mutex_t gMut;
 

//MultiThread API call
push(const ABC& obj) {
    pthread_mutex_t& lock = gMut;
    std::list<ABC>& m = gMap;
    {
        CSection CC (lock);
        m.push_back(obj);
    }
}

以上只是一个代码段/示例。 请说明可以创建本地引用对象然后调用关键部分代码吗? 如果还不行,请详细说明上述代码会出什么问题。

解决方法

请说明可以创建本地参考对象然后调用关键部分代码吗?

目前尚不清楚您认为可能存在什么问题。在注释中,您提到了数据争用,但是不清楚为什么您认为通过引用访问互斥量或受保护的数据会比直接访问它们固有地产生更多的数据争用风险。引用,包括对互斥锁的引用,是绑定到该对象的功能的替代。