提问人:kassio 提问时间:11/16/2023 更新时间:11/16/2023 访问量:38
意外的 C26117 使用 scoped_lock
Unexpected C26117 using scoped_lock
问:
出于某种原因,我在我的一个函数中使用 scoped_lock 收到 Intellisense 警告 C26117。 我不明白为什么
bool CastleManager::loopCastleBuffs(CPlayer* player, std::function<bool(CastlePackBuff)> func)
{
if (player)
{
std::scoped_lock _lock(this->CastlesData._mutex, this->Packs._mutex);
auto guild = g_NGuildManager->_FindGuild(player->m_ID.m_nID);
if (this->CastlesData.find(guild->m_guild.nMaster) != this->CastlesData.end())
{
auto castledata = this->CastlesData[guild->m_guild.nMaster];
for (auto [id, level] : castledata->packs)
{
auto pack = this->Packs[id];
if (level <= 0 || level > pack->Levels.size())
continue;
auto buffs = &pack->Levels.at(level - 1)->Buffs;
for (int i = 0; i < buffs->size(); i++)
{
if (func(buffs->at(i)))
return true;
}
}
}
}
return false; // C26117 WARNING HERE
}
最奇怪的是,当我编译时,警告没有出现在输出中,它只是用绿色下划线来标记这一行,并在我将鼠标悬停在它上面时显示警告
我的 Visual Studio 是葡萄牙语,但警告的英文翻译是:
C26117: Releasing unheld lock '_lock.$lock01' in function 'CastleManager::loopCastleBuffs'.
C26117: Releasing unheld lock 'this->CastlesData._mutex' in function 'CastleManager::loopCastleBuffs'.
C26117: Releasing unheld lock 'this->Packs._mutex' in function 'CastleManager::loopCastleBuffs'.
我已经尝试过lock_guard并得到了相同的结果。 这显然不会在运行时产生任何错误,我想知道它是否只是一个 Visual Studio 错误,我可以放心,或者我是否做错了什么并且应该修复它。
答: 暂无答案
评论
if (!player) return false;
if (this->CastlesData.find(guild->m_guild.nMaster) == this->CastlesData.end()) return false;