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_any; 15 16// ~condition_variable_any(); 17 18#include <condition_variable> 19#include <mutex> 20#include <thread> 21#include <cassert> 22 23std::condition_variable_any* cv; 24std::mutex m; 25 26bool f_ready = false; 27bool g_ready = false; 28 29void f() 30{ 31 m.lock(); 32 f_ready = true; 33 cv->notify_one(); 34 delete cv; 35 m.unlock(); 36} 37 38void g() 39{ 40 m.lock(); 41 g_ready = true; 42 cv->notify_one(); 43 while (!f_ready) 44 cv->wait(m); 45 m.unlock(); 46} 47 48int main() 49{ 50 cv = new std::condition_variable_any; 51 std::thread th2(g); 52 m.lock(); 53 while (!g_ready) 54 cv->wait(m); 55 m.unlock(); 56 std::thread th1(f); 57 th1.join(); 58 th2.join(); 59} 60