【发布时间】:2020-11-30 10:51:02
【问题描述】:
作为对象初始化的一部分,我创建了一个向量并填充了数据。初始化后向量不会被修改。向量的声明是
std::vector<AnalyticalChuckRing_t> m_analyticalRings;
我们将从多个异步任务中调用一个名为 GroupCirclesByRing 的方法。以下代码行在此方法中访问向量对象。我几乎可以肯定这些语句不需要保护,因为它不会修改对象。我在哪里可以找到确保不需要线程同步的文档?
auto GetRingAndAngle = [=](const CPoint& point)
{
double dDistance = DistanceFromOrigin(point);
double dAngle{ 0.0 };
for (int nRing = 1; nRing <= TotalRings; ++nRing)
{
if (abs(dDistance - m_analyticalRings[nRing].dRadius) < 3 )
{
dAngle = atan2((resultRings[0][0].center.m_dY - point.m_dY), (point.m_dX - resultRings[0][0].center.m_dX));
// Convert angle to range [0 : 2 PI]
dAngle = (dAngle < 0) ? (2 * M_PI + dAngle) : dAngle;
return make_tuple(nRing, dAngle);
}
}
return make_tuple(InvalidRingNo, dAngle);
};
【问题讨论】:
-
我怀疑你能找到明确说明你的代码没问题的东西。您可以找到不合适的规则,它们不适用,因为没有写任何东西
-
我的问题是我是否必须使用互斥锁来保护 GroupCirclesByRing 方法
-
我了解您的问题。您需要一个互斥锁来防止竞争条件。你读过上面的链接吗?
-
顺便说一句,细节很重要。可以将代码添加到您的 2 行中,使它们执行完全不同的操作并实际修改向量。如果您想确保得到正确答案,请附上minimal reproducible example
标签: c++ visual-c++ stl