Seb*_*anK 55 c++ gcc future mingw-w64 c++11
在我的真实程序中引入std :: async的嵌套调用后遇到崩溃后,我能够在下面的最小示例中重现该问题.它经常崩溃,但并非总是如此.你看到出了什么问题,还是编译器或标准库bug?请注意,如果get()添加对期货的调用,问题仍然存在.
#include <future>
#include <vector>
int main (int, char *[])
{
std::vector<std::future<void>> v;
v.reserve(100);
for (int i = 0; i != 100; ++i)
{
v.emplace_back(std::async(std::launch::async, [] () {
std::async(std::launch::async, [] { });
}));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我观察到两种不同的崩溃:(约每五次运行)
环境:
g++ -std=c++11 -pthread futures.cpp选项-pthread?
可能是因为某种原因在我的环境中,这个选项-pthread没有被考虑在内吗?无论有没有这个选项,我都会观察到相同的行为.
由于这个答案仍然“悬而未决”,在与 的一些人交谈后Lounge<C++>,我想我可以说,从评论中可以明显看出,这是由于当时 MinGW/MinGW-w64 或 pthread 部分的实现错误造成的。使用gcc 4.9.1,MinGW-W64,问题不再出现。事实上,即使在具有 POSIX 线程的 4.8.2 之前的版本上,上面的程序似乎也能正确编译和运行。
我自己不是专家,我的猜测是,当程序似乎尝试两次写入同一个承诺时,确切的错误就会发生,我认为这应该是一个很大的禁忌,作为 std::async应该只写一次结果(同样,我不确定我是否在这里,其他评论和编辑很可能会澄清)。
另外,这可能是一个相关的问题:std::future exception on gcc Experimental Implementing of C++0x
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |