1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// UNSUPPORTED: libcpp-has-no-threads
11
12// <condition_variable>
13
14// class condition_variable;
15
16// ~condition_variable();
17
18#include <condition_variable>
19#include <mutex>
20#include <thread>
21#include <cassert>
22
23std::condition_variable* cv;
24std::mutex m;
25typedef std::unique_lock<std::mutex> Lock;
26
27bool f_ready = false;
28bool g_ready = false;
29
30void f()
31{
32    Lock lk(m);
33    f_ready = true;
34    cv->notify_one();
35    delete cv;
36}
37
38void g()
39{
40    Lock lk(m);
41    g_ready = true;
42    cv->notify_one();
43    while (!f_ready)
44        cv->wait(lk);
45}
46
47int main()
48{
49    cv = new std::condition_variable;
50    std::thread th2(g);
51    Lock lk(m);
52    while (!g_ready)
53        cv->wait(lk);
54    lk.unlock();
55    std::thread th1(f);
56    th1.join();
57    th2.join();
58}
59