#include <thread>
#include <vector>
-#include "llvm/Support/ThreadPool.h"
-
//===----------------------------------------------------------------------===//
// Async runtime API.
//===----------------------------------------------------------------------===//
AsyncRuntime() : numRefCountedObjects(0) {}
~AsyncRuntime() {
- threadPool.wait(); // wait for the completion of all async tasks
assert(getNumRefCountedObjects() == 0 &&
"all ref counted objects must be destroyed");
}
return numRefCountedObjects.load(std::memory_order_relaxed);
}
- llvm::ThreadPool &getThreadPool() { return threadPool; }
-
private:
friend class RefCounted;
}
std::atomic<int32_t> numRefCountedObjects;
-
- llvm::ThreadPool threadPool;
};
// Returns the default per-process instance of an async runtime.
}
extern "C" void mlirAsyncRuntimeExecute(CoroHandle handle, CoroResume resume) {
- auto *runtime = getDefaultAsyncRuntimeInstance();
- runtime->getThreadPool().async([handle, resume]() { (*resume)(handle); });
+ (*resume)(handle);
}
extern "C" void mlirAsyncRuntimeAwaitTokenAndExecute(AsyncToken *token,