brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · ffce91b Raw
62 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 11// <condition_variable>12 13// class condition_variable_any;14 15// template <class Lock>16//   void wait(Lock& lock);17 18#include <condition_variable>19#include <mutex>20#include <thread>21#include <cassert>22 23#include "make_test_thread.h"24#include "test_macros.h"25 26std::condition_variable_any cv;27 28typedef std::timed_mutex L0;29typedef std::unique_lock<L0> L1;30 31L0 m0;32 33int test1 = 0;34int test2 = 0;35 36void f()37{38    L1 lk(m0);39    assert(test2 == 0);40    test1 = 1;41    cv.notify_one();42    while (test2 == 0)43        cv.wait(lk);44    assert(test2 != 0);45}46 47int main(int, char**)48{49    L1 lk(m0);50    std::thread t = support::make_test_thread(f);51    assert(test1 == 0);52    while (test1 == 0)53        cv.wait(lk);54    assert(test1 != 0);55    test2 = 1;56    lk.unlock();57    cv.notify_one();58    t.join();59 60  return 0;61}62