std::promis...thread_exit(3)
π NAME π
okay bestie, welcome to the C++ Standard Libary page for std::promise::set_value_at_thread_exit. The header/index vibe is literally std::promis...thread_exit(3) β truncation ate the middle, not me π.
The NAME line is exactly std::promise::set_value_at_thread_exit - std::promise::set_value_at_thread_exit β yes, it says the same thing twice. iconic. π
π¦ Synopsis π¦
here's the whole overload squad, exact signatures and all, with the (since C++11) receipts:
Main template
void set_value_at_thread_exit( const R& value ); (1) (since C++11)
void set_value_at_thread_exit( R&& value ); (2) (since C++11)
std::promise<R&> specializations
void set_value_at_thread_exit( R& value ); (3) (since C++11)
std::promise<void> specialization
void set_value_at_thread_exit(); (4) (since C++11)
so what does it do? It stores the value into the shared state without making the state ready immediately. The state gets made ready when the current thread exits, after all variables with thread-local storage duration have been destroyed. β¨
The operation behaves as though set_value, set_exception, set_value_at_thread_exit, and set_exception_at_thread_exit acquire a single mutex associated with the promise object while updating the promise object.
Calls to this function do not introduce data races with calls to get_future (therefore they need not synchronize with each other).
π Parameters π
valueβ value to store in the shared state. that's the whole parameter list, bestie, one (1) item π
πΈ Return value πΈ
(none) β literally no return value. it's giving void, and we respect it.
π Exceptions π
std::future_error on the following conditions:
*thishas no shared state. The error code is set tono_state.- The shared state already stores a value or exception. The error code is set to
promise_already_satisfied.
Additionally:
- Any exception thrown by the constructor selected to copy an object of type
R. - Any exception thrown by the constructor selected to move an object of type
R.
π Example π
the page says // Run this code, so run this code, bestie:
#include <future>
#include <iostream>
#include <thread>
int main()
{
using namespace std::chrono_literals;
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread([&p]
{
std::this_thread::sleep_for(1s);
p.set_value_at_thread_exit(9);
}).detach();
std::cout << "Waiting... " << std::flush;
f.wait();
std::cout << "Done!\nResult is: " << f.get() << '\n';
}
Output:
Waiting... Done!
Result is: 9
π§ Defect reports π§
the following behavior-changing defect reports were applied retroactively to previously published C++ standards:
- DR:
LWG 2098β Applied to:C++11β Behavior as published: it was unclear which exceptions are required to be thrown β Correct behavior: made clear.
π See also π
set_valueβ sets the result to specific value (public member function)set_exception_at_thread_exitβ sets the result to indicate an exception while delivering the notification only at thread exit (public member function)
that's the page, bestie π«Ά. source/version and date from the footer: http://cppreference.com, 2024.06.10. the truncated std::promis...thread_exit(3) stays iconic in the footer too, but we already covered that π
.
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms