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

履歴 編集

function
<shared_mutex>

# std::shared_lock::operator bool(C++14)

    explicit operator bool() const noexcept;

## 概要

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

## 戻り値

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

## 例外

投げない

## 例

    #include <iostream>
    #include <cassert>
    #include <shared_mutex>

    int main()
    {
      std::shared_timed_mutex mtx;
      {
        std::shared_lock<std::shared_timed_mutex> lock(mtx);

        // コンストラクタで共有ロックが取得されるので、
        // boolへの変換はtrueとなる
        if (lock) {
          std::cout << "locked" << std::endl;
        }
        else {
          assert(false);
        }
      } // 共有ロックを手放す(shared_lockのデストラクタ)

      {
        std::shared_lock<std::shared_timed_mutex> lock(mtx, std::defer_lock);

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

        lock.lock();

        // 共有ロック取得後なので、
        // boolへの変換はtrueとなる
        if (lock) {
          std::cout << "locked" << std::endl;
        }
        else {
          assert(false);
        }
      } // 共有ロックを手放す(shared_lockのデストラクタ)
    }

### 出力

    locked
    unlocked
    locked

## バージョン

### 言語

- C++14

### 処理系

- Clang: 3.5 ✅
- GCC: 4.9 ✅
- ICC: ??
- Visual C++: 2015 ✅