在std :: thread中使用std :: vector

nnrales

我有一个程序,可以在std :: vector中遍历每个类,对其进行一些操作,然后将其写入新的std :: vector

在我的程序中,std :: vector很大,在类上执行的操作很耗时。所以我想知道是否可以使用std :: thread将std :: vector上的操作分解为块。我的意思是

============================== std::vector
^ Processing by a single thread 

==========  ==========  ==========  
^ thread 1  ^ thread 2   ^ thread 3

因此,理想情况下,我将使线程1从1到10,000个元素线程2穿过下一个元素块。

最后,我希望输出以单个矢量形式出现。因此,我不必创建多个std :: vectors并将其加入。

如果有帮助,我正在努力创建类似神经网络的东西。尽管不太喜欢它,所以我不能使用它的流行实现。

我尝试了什么:(从下面的建议中)

class obj_thread {
private:
    std::mutex m_mutex; 
    std::vector<int> *_data ; 
public: 
    obj_thread(int _size = 0 )
    {
        _data = new std::vector<int>(0); 
        for(int elem_ = 0 ; elem_ < _size ; ++elem_)
            _data->push_back(elem_ * 9);
    }
    ~obj_thread()
    {
        delete _data; 
    }   
    void setElemAt(int _val , int _elem) 
    {
        std::lock_guard<std::mutex> locker(m_mutex);
            _data->at(_elem) = _val;
    };
    int getElem(int _elem) const { return _data->at(_elem);}
    int getSize() const 
    {
    //  std::lock_guard<std::mutex> locker(m_mutex);
        return _data->size();
    };
};

void zeroOut(std::vector<obj_thread*> * _obj , int _beg , int _end)
{
    for(int idx_ = _beg ; idx_ < _end ; ++idx_)
    {
        for(int idxx_ = 0 ; idxx_ < _obj->at(idx_)->getSize() ; ++idxx_)    
            _obj->at(idx_)->setElemAt(0,idxx_);
    }   
}



int main() {

std::vector<obj_thread*> * vec = new std::vector<obj_thread*>(0);
for(unsigned int index_ = 0 ; index_ < _SIZE_ ; ++index_)   
    vec->push_back(new obj_thread(_SIZE_));


    std::thread thread1(zeroOut,vec,_SIZE_/4,_SIZE_/2);
    std::thread thread2(zeroOut,vec,_SIZE_/2,_SIZE_*3/4);
    std::thread thread3(zeroOut,vec,_SIZE_*3/4,_SIZE_);

    thread1.join();
    thread2.join();
    thread3.join();

return 0 ; 
}
塞弗林·帕帕德(Severin Pappadeux)

在std :: copy之后为您的操作建模。

沿线的东西

#include <thread>

std::vector<int> in; // make whatever size you want
std::vector<int> out;

auto m_in  = in.cbegin() + in.size()/2;
auto m_out = out.begin() + in.size()/2;

std::thread t1(std::copy, in.cbegin(), m_in, out.begin());
std::thread t2(std::copy, m_in, in.cend(), m_out);

t1.join();
t2.join();

据推测,这将在一个线程中复制传入数组的一半,并在另一个线程中复制后一半。未经测试!

如果这是您想要的,现在您必须编写类似于std :: copy的函数,只需将赋值替换为您的域特定处理

http://www.cplusplus.com/reference/algorithm/copy/

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: vector的std :: thread后代

来自分类Dev

在继承std :: vector的类中使用operator []

来自分类Dev

如何使用包含std :: thread的std :: vector的结构类型正确初始化std :: vector

来自分类Dev

如何使用包含std :: thread的std :: vector的结构类型正确初始化std :: vector

来自分类Dev

在类中使用std :: vector或std :: list的Visual C ++ 2012

来自分类Dev

将std :: vector <std :: vector <std :: string >>转换为std :: vector <std :: vector <double >>

来自分类Dev

std :: vector的std :: vector的比较函数

来自分类Dev

std :: vector <int>到std :: vector <enum>

来自分类Dev

std :: vector的std :: vector的比较函数

来自分类Dev

在调用中使用 std::vector<double> 但收到有关 std::vector<double, std::allocator<double> > 正在使用的错误

来自分类Dev

使用std :: vector :: begin vs begin(vector)

来自分类Dev

对std :: vector使用嵌套的[]操作

来自分类Dev

使用std :: vector的互补向量

来自分类Dev

使用std :: vector :: iterator更改存储在std :: vector中的值?

来自分类Dev

在std :: vector构造函数中使用'{}'作为结束迭代器

来自分类Dev

如何包装std :: vector以在纯C中使用

来自分类Dev

在std :: vector中使用QString时如何释放QString的资源

来自分类Dev

使用std :: find检查std :: vector <std :: vector <std :: string >>中的项目

来自分类Dev

std :: vector数组的大小

来自分类Dev

std :: vector连续含义

来自分类Dev

std :: vector的奇怪行为

来自分类Dev

Size of array of std::vector

来自分类Dev

std :: vector内存处理

来自分类Dev

堆分配与std :: vector

来自分类Dev

重复std :: vector的内容

来自分类Dev

继承自std :: vector

来自分类Dev

std :: vector数组的大小

来自分类Dev

std :: vector超出边界

来自分类Dev

std::vector 的设置器

Related 相关文章

  1. 1

    std :: vector的std :: thread后代

  2. 2

    在继承std :: vector的类中使用operator []

  3. 3

    如何使用包含std :: thread的std :: vector的结构类型正确初始化std :: vector

  4. 4

    如何使用包含std :: thread的std :: vector的结构类型正确初始化std :: vector

  5. 5

    在类中使用std :: vector或std :: list的Visual C ++ 2012

  6. 6

    将std :: vector <std :: vector <std :: string >>转换为std :: vector <std :: vector <double >>

  7. 7

    std :: vector的std :: vector的比较函数

  8. 8

    std :: vector <int>到std :: vector <enum>

  9. 9

    std :: vector的std :: vector的比较函数

  10. 10

    在调用中使用 std::vector<double> 但收到有关 std::vector<double, std::allocator<double> > 正在使用的错误

  11. 11

    使用std :: vector :: begin vs begin(vector)

  12. 12

    对std :: vector使用嵌套的[]操作

  13. 13

    使用std :: vector的互补向量

  14. 14

    使用std :: vector :: iterator更改存储在std :: vector中的值?

  15. 15

    在std :: vector构造函数中使用'{}'作为结束迭代器

  16. 16

    如何包装std :: vector以在纯C中使用

  17. 17

    在std :: vector中使用QString时如何释放QString的资源

  18. 18

    使用std :: find检查std :: vector <std :: vector <std :: string >>中的项目

  19. 19

    std :: vector数组的大小

  20. 20

    std :: vector连续含义

  21. 21

    std :: vector的奇怪行为

  22. 22

    Size of array of std::vector

  23. 23

    std :: vector内存处理

  24. 24

    堆分配与std :: vector

  25. 25

    重复std :: vector的内容

  26. 26

    继承自std :: vector

  27. 27

    std :: vector数组的大小

  28. 28

    std :: vector超出边界

  29. 29

    std::vector 的设置器

热门标签

归档