brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 5453db4 Raw
50 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: no-threads10// UNSUPPORTED: c++0311 12// Test the interoperation of std::lock_guard with std::mutex, since that is such13// a common use case.14 15#include <cassert>16#include <mutex>17#include <type_traits>18#include <functional>19 20#include "make_test_thread.h"21#include "test_macros.h"22 23void do_try_lock(std::mutex& m) { assert(m.try_lock() == false); }24 25int main(int, char**) {26  {27    std::mutex m;28    {29      std::lock_guard<std::mutex> lg(m);30      std::thread t = support::make_test_thread(do_try_lock, std::ref(m));31      t.join();32    }33 34    // This should work because the lock_guard unlocked the mutex when it was destroyed above.35    m.lock();36    m.unlock();37  }38 39  // Test CTAD40#if TEST_STD_VER >= 1741  {42    std::mutex m;43    std::lock_guard lg(m);44    static_assert(std::is_same<decltype(lg), std::lock_guard<std::mutex>>::value, "");45  }46#endif47 48  return 0;49}50