81
правка
Изменения
→futures
=== futures ===
Если тред бросает исключение, но не ловит его, скорее всего, вся программа упадет. Чтобы такого не случилось, можно использовать futures/promises. А вообще future используется для получение некоторого значения, которое должен вернуть тред. Пример:
auto promise = std::promise<std::string>();
auto producer = std::thread([&] {
promise.set_value("Hello World");
});
auto future = promise.get_future();
auto consumer = std::thread([&] {
std::cout << future.get();
});
producer.join();
consumer.join();
Из примера вроде понятно, что происходит. future_get() ждет, пока другой тред не вернет какое-нибудь значение. Если что-то случилось, то можно в promise положить ошибку:
promise.set_exception(runtime_error(“message”));
и нормально ее обработать в другом треде.
=== TLS (thread local storage) ===
Если хочется иметь для каждого треда свои отдельные данные, то в 11х плюсах есть THL. Пример: