blob: 62bb736837eafac7581bbec0edff2b4e2ead7d72 [file] [log] [blame]
Howard Hinnantba898e42013-09-21 01:49:28 +00001//===----------------------------------------------------------------------===//
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//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Marshall Clowf54ca462015-06-11 21:47:39 +000011// UNSUPPORTED: c++03, c++98, c++11
Howard Hinnantba898e42013-09-21 01:49:28 +000012
13// <shared_mutex>
14
David Majnemerf9f95be2014-03-17 20:19:44 +000015// class shared_timed_mutex;
Howard Hinnantba898e42013-09-21 01:49:28 +000016
17// void lock();
18
19#include <shared_mutex>
20#include <thread>
21#include <cstdlib>
22#include <cassert>
23
David Majnemerf9f95be2014-03-17 20:19:44 +000024std::shared_timed_mutex m;
Howard Hinnantba898e42013-09-21 01:49:28 +000025
26typedef std::chrono::system_clock Clock;
27typedef Clock::time_point time_point;
28typedef Clock::duration duration;
29typedef std::chrono::milliseconds ms;
30typedef std::chrono::nanoseconds ns;
31
32void f()
33{
34 time_point t0 = Clock::now();
35 m.lock();
36 time_point t1 = Clock::now();
37 m.unlock();
38 ns d = t1 - t0 - ms(250);
39 assert(d < ms(50)); // within 50ms
40}
41
Howard Hinnantba898e42013-09-21 01:49:28 +000042int main()
43{
Howard Hinnantba898e42013-09-21 01:49:28 +000044 m.lock();
45 std::thread t(f);
46 std::this_thread::sleep_for(ms(250));
47 m.unlock();
48 t.join();
Howard Hinnantba898e42013-09-21 01:49:28 +000049}