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;
}
问题:C++中std::lock_guard<std::recursive_mutex> lock(m_mutex);这一句如何理解?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 急速光粒 2021-09-17 11:52关注
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互斥量初始化了互斥锁。
目的就是给数据加了个互斥锁,用于保护临界区,确保同一时间只有一个线程访问数据。
对共享资源的访问,如互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。
有帮助请采纳,谢谢!本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
- ¥15 关于#hadoop#的问题
- ¥15 (标签-Python|关键词-socket)
- ¥15 keil里为什么main.c定义的函数在it.c调用不了