summaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/threading/spin_lock_count.cpp
Commit message (Collapse)AuthorAgeFilesLines
* YT-18571: Refactor traced (fomerly tracked) spin locks and add unittestsbabenko2025-08-181-10/+15
| | | | commit_hash:2476930524e6179b49fbf312f907bd03413cd8b8
* YT-21566: Access thread local variables via noinline functionslukyan2024-04-261-5/+5
| | | | 970c33b44a7bd166b2716d86d3d2053dcaf05d7d
* Active spinlock tracking from pr3151306. Added TracelessGuards to disable ↵arkady-e1ppa2023-11-161-0/+43
mentioned tracking 1) Добавлена возможность инструментировать ваш любимый мьютекс/спинлок/что-либо с методами Acquire/Release со схожим смыслом. Делается это засчет методов ```NThreading::NDetail::RecordSpinlockAcquired```/```NThreading::NDetail::RecordSpinlockReleased```. Они отслеживают число захваченных спинлоков. 2) Добавлен макрос ```REGISTER_TRACKED_SPIN_LOCK_CLASS```, который позволяет номинально проверить на этапе компиляции, что данный спинлок отслеживается. 3) Добавлен метод ```NThreading::VerifyNoSpinlockAffinity```, который коркается, если число захваченных спинлоков больше нуля. 4) Добавлены Traceless версии (почти) всех гардов, чтобы можно было не отслеживать конкретную критическую секцию, если очень нужно. 5) Внутри файберного ```WaitUntilSet``` вызывается ```VerifyNoSpinlockAffinity``` -- делать ```WaitFor``` или ```Yield``` внутри отслеживаемых критических секций нельзя. Если очень хочется -- используем TracelessGuard нужного вида. 6) Теперь отслеживаются такие спинлоки и их наследники: ```TSpinLock```, ```TRecursiveSpinLock```, ```TReaderWriterSpinLock```. 7) Зарегистрированы как отслеживаемые все вышеперечисленные спинлоки и их Padded версии. 8) Все эти действия имеют эффект только в дебаг сборке. В релизе вся эта диагностика стирается.