【发布时间】:2015-07-18 11:51:02
【问题描述】:
C++ std::promise 分段错误
此代码创建多个线程并向它们发送promise&。当他们调用 promise::set_value 尝试将数据返回给 main 时,它会出现段错误。
谁能解释为什么这段代码会产生分段错误?
void workerFunc(promise<long>& prom) {
long number = doInterestingThings();
//SEGFAULT!!!
prom.set_value(number);
return;
}
线程函数。它在prom.set_value 处出现段错误。如果我只创建 1 个线程,则不会这样做。
int main (int argc, char** argv) {
vector<promise<long>> promises;
vector<future<long>> futures;
vector<thread> workers;
初始化。
const int createThisMany = 6;
for (int i = 0; i < createThisMany; i++) {
promises.emplace_back();
futures.push_back(promises.back().get_future());
workers.emplace_back(workerFunc, std::ref(promises.back()));
}
创建所有线程和promise 和future 对象。不包括监控向量和删除死线程等的主循环。
promise 和 futures 是否必须同步?
我在 Lubuntu 14.04 上使用 gcc 4.9
【问题讨论】:
标签: c++ multithreading c++11