Изменения

Перейти к: навигация, поиск

Участник:Qwerty787788/плюсы3сем

1159 байт добавлено, 02:47, 18 января 2013
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. Пример:
81
правка

Навигация