brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 9a4c68b Raw
51 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: c++0310// UNSUPPORTED: no-threads11 12// <mutex>13 14// class timed_mutex;15 16// bool try_lock();17 18#include <mutex>19#include <cassert>20#include <thread>21 22#include "make_test_thread.h"23 24int main(int, char**) {25  // Try to lock a mutex that is not locked yet. This should succeed.26  {27    std::timed_mutex m;28    bool succeeded = m.try_lock();29    assert(succeeded);30    m.unlock();31  }32 33  // Try to lock a mutex that is already locked. This should fail.34  {35    std::timed_mutex m;36    m.lock();37 38    std::thread t = support::make_test_thread([&] {39      for (int i = 0; i != 10; ++i) {40        bool succeeded = m.try_lock();41        assert(!succeeded);42      }43    });44    t.join();45 46    m.unlock();47  }48 49  return 0;50}51