从多个线程访问类对象

丹尼斯夫

假设我有一些类似于下面的容器类:

class Container {
public:
    int const & operator[] (int n) const {
        return data[n];
    }
private:
    std::vector<int> data;
}

我需要使用重载运算符[]并通过引用将此类的对象传递给lambda捕获,以从多个线程访问其元素

Container store;
std::thread t_1([&store]() { /* do something here and read from store */ } );
std::thread t_2([&store]() { /* do something here and read from store */ } );

这样的设计会不会减慢速度?有可能以某种方式加速这部分吗?

狂暴的

由于std::vectordata()堆上谎言而已,你不能省略访问那里。唯一更快的方法是将元素保留在两个线程的堆栈中(线程具有单独的堆栈,但共享堆空间),但这在这里是不可能的。因此,我认为您的情况不会有任何优化,除非您共享整个实现,并且通过更改方法,可能会提出性能更高的实现。

不过,我建议不要这样做。那将属于CodeReview,而不是StackOverflow。

最后,我想提一提的线程安全性-我看不出有任何的比赛在这里,我相信你明确提出确保例子不暗示,可能遇到的(仅显示获得,而不是共享资源),但是检查它们仍然是一个好主意。如果您只读取内容,则不会发生数据争用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章