注意我已经看过这里找到的答案: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将所有参数复制到线程存储这一事实,但它对我没用。
答案 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()
在函数调用之前复制参数。