问题:C++中std::lock_guard lock(m_mutex);这一句如何理解?

问题:C++中std::lock_guard<std::recursive_mutex> lock(m_mutex);这一句如何理解?

问题描述:


    bool MediaAudioPlayer::play()
    {
        std::lock_guard<std::recursive_mutex> lock(m_mutex);
        DLT_LOG_FCN_CXX(playerContext, DLT_LOG_DEBUG, "");
        DLT_LOG_CXX(playerContext, DLT_LOG_DEBUG, "mSourceId =", m_sourceId, "mSourceType =", toString(m_sourceType), "mCurrentTrackPath =", m_currentTrackPath);

        std::string filePath {};
        if(m_pMediaTracklistManager != nullptr)
        {
            filePath += m_pMediaTracklistManager->GetCurrentTrack(m_sourceId, m_sourceType);
        }
        if(filePath.empty())
        {
            DLT_LOG_CXX(playerContext, DLT_LOG_DEBUG, "new filePath is empty, can't play");
            return false;
        }

        DLT_LOG_CXX(playerContext, DLT_LOG_DEBUG, "filePath to play =", filePath, "mIsFileOpened =", m_isFileOpened);

        bool res = true;
        if (m_isFileOpened == false || (filePath.compare(m_currentTrackPath) != 0))
        {
            res = this->openStream(filePath);
            if (m_currentTrackPosition != 0)
            {
                this->pause();
                this->seek(m_currentTrackPosition);
                return res;
            }
        }
        else
        {
            DLT_LOG_CXX(playerContext, DLT_LOG_DEBUG, "File is already opened");
        }

        if (res == true)
        {
            res = this->playStream();
        }

        return res;
    }

std::lock_guardstd::recursive_mutex lock(m_mutex);
std::lock_guard:是std库提供的锁模板类。
std::recursive_mutex:是std库的互斥类,std::lock_guardstd::recursive_mutex就是互斥锁。
lock(m_mutex);是用m_mutex互斥量初始化了互斥锁。
目的就是给数据加了个互斥锁,用于保护临界区,确保同一时间只有一个线程访问数据。
对共享资源的访问,如互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。
有帮助请采纳,谢谢!

有个不成熟的看法:
std::lock_guard<std::recursive_mutex> lock(m_mutex);
lock是类lock_guard的实例化对象,
stdlock_guard的命名空间, recursive_mutexlock的数据类型。
lock_guard是一个模板类,所以需要使用模板的使用方法去使用。


 std::string filePath {};

如何理解?