У меня есть класс, который вызывает асинхронную задачу, используя std::async
в своем конструкторе для загрузки его содержимого. (Я хочу загрузку объекта выполняется асинхронно)Деструкторы и асинхронные задачи
код выглядит следующим образом:
void loadObject(Object* object)
{
// ... load object
}
Object::Object():
{
auto future = std::async(std::launch::async, loadObject, this);
}
Я несколько экземпляров этих объектов получение создаются и удаляются на моем главном потоке, они могут получить удалены в любое время , еще до того, как их загрузка закончилась.
Я хотел бы знать, опасно ли уничтожить объект, когда он все еще обрабатывается в другом потоке. И как я могу остановить поток, если объект будет уничтожен?
EDIT:std::future
деструктор не блокирует мой код с компилятором VS2013, что я использую из-за bug.
Неопределенное поведение для изменения объекта и доступа к нему в другом потоке одновременно без синхронизации. Что вы ожидаете, должно произойти, когда объект, с которым вы работаете, удаляется из-под ног? –
_ «они могут быть удалены в любое время, даже до того, как их загрузка закончится». _ No no no no no! –
@LightningRacisinObrit, это ничего плохого в том, чтобы удалить smth, который еще не загружен. Вам просто нужно загрузить его атомарно (BTW, именно вы разрабатываете современные браузеры, которые никогда не перестанут загружать страницу посередине?) – Lol4t0