/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/yt/threading/futex.cpp
63 строки
1 KB
qkrorlqr
Initial NBS OpenSource export
28 апр 2023, 21:54
28 апр 2023, 21:54
783a858
Код
Авторство
О чём код?
#include "futex.h" #ifdef _linux_ #include <linux/futex.h> #include <sys/time.h> #include <sys/syscall.h> #endif namespace NYT::NThreading { //////////////////////////////////////////////////////////////////////////////// #ifdef _linux_ namespace { int Futex( int* uaddr, int op, int val, const timespec* timeout, int* uaddr2, int val3) { return ::syscall(SYS_futex, uaddr, op, val, timeout, uaddr2, val3); } } // namespace int FutexWait(int* addr, int value, TDuration timeout) { struct timespec timeoutSpec; if (timeout != TDuration::Max()) { timeoutSpec.tv_sec = timeout.Seconds(); timeoutSpec.tv_nsec = (timeout - TDuration::Seconds(timeout.Seconds())).MicroSeconds() * 1000; } return Futex( addr, FUTEX_WAIT_PRIVATE, value, timeout != TDuration::Max() ? &timeoutSpec : nullptr, nullptr, 0); } int FutexWake(int* addr, int count) { return Futex( addr, FUTEX_WAKE_PRIVATE, count, nullptr, nullptr, 0); } #endif //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NThreading