/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/yt/threading/spin_wait_hook.cpp
37 строк
1 KB
qkrorlqr
Initial NBS OpenSource export
28 апр 2023, 21:54
28 апр 2023, 21:54
783a858
Код
Авторство
О чём код?
#include "spin_wait_hook.h" #include <library/cpp/yt/assert/assert.h> #include <array> #include <atomic> namespace NYT::NThreading { //////////////////////////////////////////////////////////////////////////////// static constexpr int MaxSpinWaitSlowPathHooks = 8; static std::array<std::atomic<TSpinWaitSlowPathHook>, MaxSpinWaitSlowPathHooks> SpinWaitSlowPathHooks; static std::atomic<int> SpinWaitSlowPathHookCount; void RegisterSpinWaitSlowPathHook(TSpinWaitSlowPathHook hook) { int index = SpinWaitSlowPathHookCount++; YT_VERIFY(index < MaxSpinWaitSlowPathHooks); SpinWaitSlowPathHooks[index].store(hook); } void InvokeSpinWaitSlowPathHooks( TCpuDuration cpuDelay, const ::TSourceLocation& location, ESpinLockActivityKind activityKind) { for (const auto& atomicHook : SpinWaitSlowPathHooks) { if (auto hook = atomicHook.load()) { hook(cpuDelay, location, activityKind); } } } //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NThreading