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