最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

class
<thread>

# std::thread::id(C++11)

    namespace std {
      class thread::id {
      public:
        id() noexcept;
      };

      bool operator==(thread::id x, thread::id y) noexcept;
      bool operator!=(thread::id x, thread::id y) noexcept;
      bool operator<(thread::id x, thread::id y) noexcept;
      bool operator<=(thread::id x, thread::id y) noexcept;
      bool operator>(thread::id x, thread::id y) noexcept;
      bool operator>=(thread::id x, thread::id y) noexcept;

      template<class CharT, class Traits>
      std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& out, thread::id id);

      template <class T> struct hash;
      template <> struct hash<thread::id>;
    }

## 概要

スレッド識別子。trivially copyable class。

実行のスレッドに対して一意な`thread::id`が対応づけられる。デフォルト構築された`thread::id`はいかなるスレッドとも対応付けられない（ポインタ型における`nullptr`のようなもの）。

終了したスレッドを表す識別子の値は、再利用される可能性がある。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`id() noexcept` | デフォルトコンストラクタ。いかなるスレッドも指さない識別子を生成する。 | C++11

## 比較演算子

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較 | C++11
`operator!=` | 非等値比較 (C++20から`operator==`により使用可能) | C++11
`operator<` | 左辺が右辺より小さいかの判定を行う (C++20から`operator<=>`により使用可能) | C++11
`operator<=` | 左辺が右辺以下かの判定を行う (C++20から`operator<=>`により使用可能) | C++11
`operator>` | 左辺が右辺より大きいかの判定を行う (C++20から`operator<=>`により使用可能) | C++11
`operator>=` | 左辺が右辺以上かの判定を行う (C++20から`operator<=>`により使用可能) | C++11
`strong_ordering operator<=>(thread::id x, thread::id y) noexcept;` | 三方比較 | C++20

### ストリーム出力

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | `thread::id`のストリーム出力。 フォーマットは未規定だが、他の識別子と異なることがわかる表現となる。 | C++11

## ハッシュサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`hash` | `thread::id`での特殊化 (class template) | C++11

## 文字列フォーマットサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`formatter` | `std::formatter`クラスの特殊化 | C++23

## 例

    #include <iostream>
    #include <thread>

    int main()
    {
      const std::thread::id main_tid = std::this_thread::get_id();
      std::cout << "main=" << main_tid << std::endl;
      return 0;
    }

### 出力例

    main=824a30

## バージョン

### 言語

- C++11

### 処理系

- Clang:
- GCC:
- ICC:
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅

## 参照

- LWG Issue 783. `thread::id` reuse
- P1614R2 The Mothership has Landed
  - C++20での三方比較演算子の追加と、関連する演算子の自動導出