【发布时间】:2015-04-11 21:45:26
【问题描述】:
我有一个类调用异步任务,在他的构造函数中使用std::async 来加载其内容。 (我希望异步加载对象)
代码如下:
void loadObject(Object* object)
{
// ... load object
}
Object::Object():
{
auto future = std::async(std::launch::async, loadObject, this);
}
我在我的主线程上创建和删除了这些对象的几个实例,它们可以随时被删除,甚至在加载完成之前。
我想知道当对象仍在另一个线程上处理时被销毁是否危险。如果对象被破坏,我该如何停止线程?
编辑:由于bug,std::future 析构函数不会使用我正在使用的 VS2013 编译器阻止我的代码。
【问题讨论】:
-
更改一个对象并在另一个线程中同时访问它而不进行同步是未定义的行为。当您正在处理的对象从您的脚下被删除时,您期望会发生什么?
-
“他们可以随时被删除,甚至在加载完成之前。”不不不不不!
-
@LightningRacisinObrit,删除尚未加载的smth并没有错。你只需要自动加载它(顺便说一句,是你开发的现代浏览器永远不会在中间停止加载页面?)
-
@Lol4t0:你错了。
-
@LightningRacisinObrit,没有。是你
标签: c++ multithreading asynchronous concurrency