3 #include "llvm/ADT/ScopeExit.h" 4 #include "llvm/Support/FormatVariadic.h" 5 #include "llvm/Support/Threading.h" 10 #elif defined(__APPLE__) 11 #include <sys/resource.h> 12 #elif defined (_WIN32) 21 std::lock_guard<std::mutex> Lock(Mu);
28 std::unique_lock<std::mutex> Lock(Mu);
29 CV.wait(Lock, [
this] {
return Notified; });
35 std::unique_lock<std::mutex> Lock(Mutex);
48 std::unique_lock<std::mutex> Lock(Mutex);
49 SlotsChanged.wait(Lock, [&]() {
return FreeSlots > 0; });
55 std::unique_lock<std::mutex> Lock(Mutex);
59 SlotsChanged.notify_one();
65 std::unique_lock<std::mutex> Lock(Mutex);
67 [&] {
return InFlightTasks == 0; });
71 llvm::unique_function<
void()>
Action) {
73 std::lock_guard<std::mutex> Lock(Mutex);
77 auto CleanupTask = llvm::make_scope_exit([
this]() {
78 std::lock_guard<std::mutex> Lock(Mutex);
79 int NewTasksCnt = --InFlightTasks;
80 if (NewTasksCnt == 0) {
83 TasksReachedZero.notify_one();
88 [](std::string Name, decltype(
Action)
Action, decltype(CleanupTask)) {
89 llvm::set_thread_name(Name);
95 Name.str(), std::move(Action), std::move(CleanupTask))
100 using namespace std::chrono;
103 return steady_clock::now() +
104 duration_cast<steady_clock::duration>(duration<double>(*Seconds));
107 void wait(std::unique_lock<std::mutex> &Lock, std::condition_variable &CV,
112 return CV.wait(Lock);
113 CV.wait_until(Lock, D.
time());
~AsyncTaskRunner()
Destructor waits for all pending tasks to finish.
Semaphore(std::size_t MaxLocks)
void runAsync(const llvm::Twine &Name, llvm::unique_function< void()> Action)
static Deadline infinity()
llvm::unique_function< void()> Action
static constexpr llvm::StringLiteral Name
void wait(std::unique_lock< std::mutex > &Lock, std::condition_variable &CV, Deadline D)
Wait once on CV for the specified duration.
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Deadline timeoutSeconds(llvm::Optional< double > Seconds)
Makes a deadline from a timeout in seconds. None means wait forever.
A point in time we can wait for.
Records an event whose duration is the lifetime of the Span object.
std::chrono::steady_clock::time_point time() const