从Boost线程返回容器

时间:2013-09-09 20:05:35

标签: c++ multithreading boost map

注意我已经看过这里找到的答案:Return Double from Boost thread,但是建议的解决方案对我不起作用。

我有以下tid-bits源代码

   void run(int tNumber, std::vector<char *>files, std::map<std::basic_string,float>word_count)
    {

    boost::thread_group threads;

    std::map<std::basic_string,float> temp;

    for(int i = 0; i < tNumber; ++i)
        threads.create_thread(boost::bind(mtReadFile,files[i],boost::ref(word_count)));


    threads.join_all()
    }

这是为调用进程创建新线程的函数。然后这些线程调用mtReadFile的实例。

    void mtReadFile(char *filename, std::map<std::basic_string,float> word_count)
    {
          //function like things
    }

我需要发生的是将word_count从每个线程返回到调用进程。我已经尝试过boost :: ref,希望能够解决boost thread将所有参数复制到线程存储这一事实,但它对我没用。

1 个答案:

答案 0 :(得分:0)

您的word_count参数按值传递,而不是通过引用传递:

void mtReadFile(char *filename, std::map<std::basic_string,float> word_count)

而不是

void mtReadFile(char *filename, std::map<std::basic_string,float> &word_count)

即使在单线程的情况下也是如此,在尝试更复杂的多线程之前,你应该测试它。

该函数需要接受引用,并且您需要boost::ref()来阻止boost::thread()在函数调用之前复制参数。