以下代码在使用MSVC编译器的
控制台输出如下:
f:\dd\vctools\crt\crtw32\stdcpp\thr\mutex.c(51): mutex destroyed while busy
完整的调用堆栈是: https://pastebin.com/0g2ZF5C1 显然这只是一个压力测试,但我是否做了什么非常愚蠢的事情? 在我看来,将新任务分配给现有的future是可以的,因为它说
释放任何共享状态并将其他内容移动分配给*this
(由于http://en.cppreference.com/w/cpp/thread/future/operator%3D)。
这是MSVC运行时中的错误吗?
值得注意的是,在赋值之前手动调用wait(),程序停止崩溃,从而使循环变成:
刚刚打开了一个全新的 C++ 项目。
Debug
模式下,与Release
模式不同,会在随机时间崩溃。#include <future>
using namespace std;
int main() {
auto l = [](){};
auto f = async(launch::async, l);
for (int i = 0; i < 1000000; ++i)
f = async(launch::async, l);
}
控制台输出如下:
f:\dd\vctools\crt\crtw32\stdcpp\thr\mutex.c(51): mutex destroyed while busy
完整的调用堆栈是: https://pastebin.com/0g2ZF5C1 显然这只是一个压力测试,但我是否做了什么非常愚蠢的事情? 在我看来,将新任务分配给现有的future是可以的,因为它说
operator=
:释放任何共享状态并将其他内容移动分配给*this
(由于http://en.cppreference.com/w/cpp/thread/future/operator%3D)。
这是MSVC运行时中的错误吗?
值得注意的是,在赋值之前手动调用wait(),程序停止崩溃,从而使循环变成:
for (int i = 0; i < 1000000; ++i) {
f.wait();
f = async(launch::async, l);
}
“operator=”本身应该调用“wait”,对吗?
背景:
_MSC_VER
等于1911
代码构建时使用了以下帮助:
Microsoft Visual Studio Community 2017 Preview(2)
Version 15.4.0 Preview 2.0
刚刚打开了一个全新的 C++ 项目。