问题描述
学习多线程编程过程,因为编写代码不够严谨并且对std::promise与std::future的了解不够到位,造成了这次程序崩溃。
问题报错信息如下:
(最近老是搞崩程序啊,流泪啊。。。)
示例代码如下:
void promise_future_example()
{
auto meaning = [](std::promise<int>& prom) {
//first set value by promise, note: only set value once by promise
prom.set_value(42);
//many codes
//...
//error: second set value by promise
prom.set_value(41);
};
std::promise<int> prom;
std::future<int> result = prom.get_future();
std::thread(meaning, std::ref(prom)).detach();
std::cout << "the meaning of the life: " << result.get() << std::endl;
}
原因分析:
这次遇到的问题,还是因为对std::promise的了解的不到位,当然如果遇到代码量超多的情况,也可能会发生这种问题,就是在一个任务(线程)中连续调用两次或多次std::promise::set_value()函数,这是造成本次程序崩溃的根因所在。
基础很重要,细心同样重要,不然这个问题就不会发生了。。。
解决方案:
在线程函数中去除多余的std::promise::set_value()函数调用即可。
(解决方案多简单,定位问题老费劲了。。。)