Namespaces
Variants

std::promise<R>:: set_value_at_thread_exit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
メインテンプレート
void set_value_at_thread_exit ( const R & value ) ;
(1) (C++11以降)
void set_value_at_thread_exit ( R && value ) ;
(2) (C++11以降)
std:: promise < R & > 特殊化
void set_value_at_thread_exit ( R & value ) ;
(3) (C++11以降)
std:: promise < void > 特殊化
void set_value_at_thread_exit ( ) ;
(4) (C++11以降)

スレッドローカルストレージ期間を持つすべての変数が破棄された後、現在のスレッドが終了する際に、状態を準備完了状態にすることなく、共有状態に value を格納します。

この操作は、プロミスオブジェクトの更新中に、 set_value set_exception set_value_at_thread_exit および set_exception_at_thread_exit がプロミスオブジェクトに関連付けられた単一のミューテックスを獲得するかのように振る舞います。

この関数の呼び出しは、 get_future の呼び出しとの間でデータ競合を引き起こしません (したがって、これらは互いに同期を取る必要はありません)。

目次

パラメータ

value - 共有状態に格納する値

戻り値

(なし)

例外

std::future_error が以下の条件で発生します:

  • * this は共有状態を持ちません。エラーコードは no_state に設定されます。
  • 共有状態には既に値または例外が格納されています。エラーコードは promise_already_satisfied に設定されます。

さらに:

1) R のオブジェクトをコピーするために選択されたコンストラクタによってスローされるあらゆる例外。
2) R のオブジェクトをムーブするために選択されたコンストラクタによってスローされるあらゆる例外。

#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';
}

出力:

Waiting... Done!
Result is: 9

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2098 C++11 どの例外がスローされるべきか不明確であった 明確化された

関連項目

指定された値に結果を設定する
(公開メンバ関数)
例外を示す結果を設定し、通知はスレッド終了時のみに配信する
(公開メンバ関数)