首页 > 解决方案 > Vector[]操作(只读)线程安全

问题描述

作为对象初始化的一部分,我创建了一个向量并填充了数据。初始化后向量不会被修改。向量的声明是

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);
            };

标签: c++visual-c++stl

解决方案


我在哪里可以找到确保不需要线程同步的文档?

那将是 C++ 标准。草稿可在https://github.com/cplusplus/draft公开获得

看看像 [intro.races] 这样的部分。


推荐阅读