最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

function
<mutex>

# std::unique_lock::operator bool(C++11)

    explicit operator bool() const noexcept;

## 概要

ロックを取得しているかを確認する

## 戻り値

ロックが取得済みであれば`true`、そうでなければ`false`を返す。

## 例外

投げない

## 例

    #include <iostream>
    #include <cassert>
    #include <mutex>

    int main()
    {
      std::mutex mtx;
      {
        std::unique_lock<std::mutex> lk(mtx);

        // コンストラクタでロック取得されるので、boolへの変換はtrueとなる
        if (lk) {
          std::cout << "locked" << std::endl;
        }
        else {
          assert(false);
        }
      }

      {
        std::unique_lock<std::mutex> lk(mtx, std::defer_lock);

        // 遅延ロックのためコンストラクタでロック取得されないので、
        // boolへの変換はfalseとなる
        if (!lk) {
          std::cout << "unlocked" << std::endl;
        }
        else {
          assert(false);
        }

        lk.lock();

        // ロック取得後なので、boolへの変換はtrueとなる
        if (lk) {
          std::cout << "locked" << std::endl;
        }
        else {
          assert(false);
        }
      }
    }

### 出力

    locked
    unlocked
    locked

## バージョン

### 言語

- C++11

### 処理系

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

## 参照