Lines Matching refs:token
241 AsyncToken *token = new AsyncToken(getDefaultAsyncRuntime()); in mlirAsyncRuntimeCreateToken() local
242 return token; in mlirAsyncRuntimeCreateToken()
257 extern "C" int64_t mlirAsyncRuntimeAddTokenToGroup(AsyncToken *token, in mlirAsyncRuntimeAddTokenToGroup() argument
259 std::unique_lock<std::mutex> lockToken(token->mu); in mlirAsyncRuntimeAddTokenToGroup()
265 auto onTokenReady = [group, token]() { in mlirAsyncRuntimeAddTokenToGroup()
267 if (State(token->state).isError()) in mlirAsyncRuntimeAddTokenToGroup()
282 if (State(token->state).isAvailableOrError()) { in mlirAsyncRuntimeAddTokenToGroup()
292 token->awaiters.emplace_back([group, onTokenReady]() { in mlirAsyncRuntimeAddTokenToGroup()
307 static void setTokenState(AsyncToken *token, State state) { in setTokenState() argument
309 assert(State(token->state).isUnavailable() && "token must be unavailable"); in setTokenState()
313 std::unique_lock<std::mutex> lock(token->mu); in setTokenState()
314 token->state = state; in setTokenState()
315 token->cv.notify_all(); in setTokenState()
316 for (auto &awaiter : token->awaiters) in setTokenState()
322 token->dropRef(); in setTokenState()
343 extern "C" void mlirAsyncRuntimeEmplaceToken(AsyncToken *token) { in mlirAsyncRuntimeEmplaceToken() argument
344 setTokenState(token, State::kAvailable); in mlirAsyncRuntimeEmplaceToken()
351 extern "C" void mlirAsyncRuntimeSetTokenError(AsyncToken *token) { in mlirAsyncRuntimeSetTokenError() argument
352 setTokenState(token, State::kError); in mlirAsyncRuntimeSetTokenError()
359 extern "C" bool mlirAsyncRuntimeIsTokenError(AsyncToken *token) { in mlirAsyncRuntimeIsTokenError() argument
360 return State(token->state).isError(); in mlirAsyncRuntimeIsTokenError()
371 extern "C" void mlirAsyncRuntimeAwaitToken(AsyncToken *token) { in mlirAsyncRuntimeAwaitToken() argument
372 std::unique_lock<std::mutex> lock(token->mu); in mlirAsyncRuntimeAwaitToken()
373 if (!State(token->state).isAvailableOrError()) in mlirAsyncRuntimeAwaitToken()
374 token->cv.wait( in mlirAsyncRuntimeAwaitToken()
375 lock, [token] { return State(token->state).isAvailableOrError(); }); in mlirAsyncRuntimeAwaitToken()
402 extern "C" void mlirAsyncRuntimeAwaitTokenAndExecute(AsyncToken *token, in mlirAsyncRuntimeAwaitTokenAndExecute() argument
406 std::unique_lock<std::mutex> lock(token->mu); in mlirAsyncRuntimeAwaitTokenAndExecute()
407 if (State(token->state).isAvailableOrError()) { in mlirAsyncRuntimeAwaitTokenAndExecute()
411 token->awaiters.emplace_back([execute]() { execute(); }); in mlirAsyncRuntimeAwaitTokenAndExecute()