从线程中获取成员数据

时间:2013-07-31 16:24:53

标签: c++ multithreading

我正在使用多个线程读取.csv文件。每个线程读取.csv文件的一部分,例如。 thread1从line:214读取到line:359

CSVReader reader1("C:\\file.csv", 214, 359);

在阅读过程中,数据字段存储在矢量实例中。

data[i].push_back(data_field);

在主要功能中,代码如下:

CSVReader reader1("C:\\file.csv", 214, 359);
CSVReader reader2("C:\\file.csv", 360, 517);

thread t1(&CSVReader::read_range, reader1);
thread t2(&CSVReader::read_range, reader2);

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

vector<vector<string>> temp_data = reader1.get_data();  // Here I have the problem

理想情况下,reader1.get_data()应该在line:214line:359之间返回数据。但是当我调查temp_data时,我发现它根本没有改变。

我可以知道我错了吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

创建线程时,您传递reader1reader2副本,因此副本不会被修改而不是原始对象。这意味着数据将添加到副本中,原始对象不会更改。要通过引用传递它们,请使用std::ref(reader1)std::ref(reader2)

如果你的CSVReader::read_range函数接受了引用,你的代码不应该编译,但是一些错误的编译器(包括Visual C ++)接受它。

(N.B。一般来说,你应该已经显示了CSVReader::read_range的定义或至少是签名,所以人们不必猜测你的代码是做什么的。)

相关问题