summaryrefslogtreecommitdiffstats
path: root/library/cpp/threading
diff options
context:
space:
mode:
authorYDBot <[email protected]>2026-01-15 00:52:36 +0000
committerYDBot <[email protected]>2026-01-15 00:52:36 +0000
commit5acf11e0f56d60f4287d7babe0f235789ffd526b (patch)
tree471495c3e9c2cc67b208a97a899247b9ce866435 /library/cpp/threading
parent2957d23549e52ac4d1d9972eece968ba7979bd55 (diff)
parent743db03e460759247cc83b5c9f44cba60416b240 (diff)
Sync branches 260115-0051
Diffstat (limited to 'library/cpp/threading')
-rw-r--r--library/cpp/threading/hot_swap/hot_swap.cpp9
-rw-r--r--library/cpp/threading/hot_swap/hot_swap.h36
-rw-r--r--library/cpp/threading/hot_swap/ya.make4
3 files changed, 22 insertions, 27 deletions
diff --git a/library/cpp/threading/hot_swap/hot_swap.cpp b/library/cpp/threading/hot_swap/hot_swap.cpp
index f8127ae45f8..ba2601e2b0d 100644
--- a/library/cpp/threading/hot_swap/hot_swap.cpp
+++ b/library/cpp/threading/hot_swap/hot_swap.cpp
@@ -4,18 +4,17 @@
namespace NHotSwapPrivate {
void TWriterLock::Acquire() noexcept {
- AtomicIncrement(ReadersCount);
+ ++ReadersCount;
}
void TWriterLock::Release() noexcept {
- AtomicDecrement(ReadersCount);
+ --ReadersCount;
}
void TWriterLock::WaitAllReaders() const noexcept {
- TAtomicBase cnt = AtomicGet(ReadersCount);
- while (cnt > 0) {
+ for (i32 cnt = ReadersCount.load(); cnt > 0;) {
SpinLockPause();
- cnt = AtomicGet(ReadersCount);
+ cnt = ReadersCount.load();
Y_ASSERT(cnt >= 0);
}
}
diff --git a/library/cpp/threading/hot_swap/hot_swap.h b/library/cpp/threading/hot_swap/hot_swap.h
index e155614b533..5bee1ae25ab 100644
--- a/library/cpp/threading/hot_swap/hot_swap.h
+++ b/library/cpp/threading/hot_swap/hot_swap.h
@@ -2,12 +2,12 @@
#include <util/generic/cast.h>
#include <util/generic/ptr.h>
-#include <util/generic/utility.h>
-#include <library/cpp/deprecated/atomic/atomic.h>
#include <util/system/guard.h>
#include <util/system/spinlock.h>
#include <util/system/yassert.h>
+#include <atomic>
+
namespace NHotSwapPrivate {
// Special guard object for THotSwap
class TWriterLock {
@@ -19,7 +19,7 @@ namespace NHotSwapPrivate {
void WaitAllReaders() const noexcept;
private:
- TAtomic ReadersCount = 0;
+ std::atomic<i32> ReadersCount = 0;
};
}
@@ -52,8 +52,7 @@ public:
using TPtr = TIntrusivePtr<T, Ops>;
public:
- THotSwap() noexcept {
- }
+ THotSwap() noexcept = default;
explicit THotSwap(T* p) noexcept {
AtomicStore(p);
@@ -70,7 +69,8 @@ public:
}
THotSwap(THotSwap&& other) noexcept {
- DoSwap(RawPtr, other.RawPtr); // we don't need thread safety, because both objects are local
+ RawPtr.store(other.RawPtr.load()); // we don't need thread safety, because both objects are local
+ other.RawPtr.store(0);
}
~THotSwap() noexcept {
@@ -86,7 +86,7 @@ public:
///
/// @returns Current value of stored object
TPtr AtomicLoad() const noexcept {
- const TAtomicBase lockIndex = GetLockIndex();
+ const ui32 lockIndex = GetLockIndex();
auto guard = Guard(WriterLocks[lockIndex]); // non-blocking (for other AtomicLoad()'s) guard
return GetRawPtr();
}
@@ -105,24 +105,24 @@ public:
private:
T* GetRawPtr() const noexcept {
- return reinterpret_cast<T*>(AtomicGet(RawPtr));
+ return reinterpret_cast<T*>(RawPtr.load());
}
- TAtomicBase GetLockIndex() const noexcept {
- return AtomicGet(LockIndex);
+ ui32 GetLockIndex() const noexcept {
+ return LockIndex.load();
}
- TAtomicBase SwitchLockIndex() noexcept; // returns previous index value
+ ui32 SwitchLockIndex() noexcept; // returns previous index value
void SwitchRawPtr(T* from, T* to) noexcept;
void WaitReaders() noexcept;
private:
- TAtomic RawPtr = 0; // T* // Pointer to current value
- static_assert(sizeof(TAtomic) == sizeof(T*), "TAtomic can't represent a pointer value");
+ std::atomic<intptr_t> RawPtr = 0; // T* // Pointer to current value
+ static_assert(sizeof(std::atomic<intptr_t>) == sizeof(T*), "std::atomic<intptr_t> can't represent a pointer value");
TAdaptiveLock UpdateMutex; // Guarantee that AtomicStore() will be one at a time
mutable NHotSwapPrivate::TWriterLock WriterLocks[2]; // Guarantee that AtomicStore() will wait for all concurrent AtomicLoad()'s completion
- TAtomic LockIndex = 0;
+ std::atomic<ui32> LockIndex = 0;
};
// Atomic operations of AtomicLoad:
@@ -167,10 +167,10 @@ void THotSwap<T, Ops>::AtomicStore(T* p) noexcept {
}
template <class T, class Ops>
-TAtomicBase THotSwap<T, Ops>::SwitchLockIndex() noexcept {
- const TAtomicBase prevIndex = AtomicGet(LockIndex);
+ui32 THotSwap<T, Ops>::SwitchLockIndex() noexcept {
+ const ui32 prevIndex = LockIndex.load();
Y_ASSERT(prevIndex == 0 || prevIndex == 1);
- AtomicSet(LockIndex, prevIndex ^ 1);
+ LockIndex.store(prevIndex ^ 1u);
return prevIndex;
}
@@ -185,7 +185,7 @@ void THotSwap<T, Ops>::SwitchRawPtr(T* from, T* to) noexcept {
if (to)
Ops::Ref(to); // Ref() for new value
- AtomicSet(RawPtr, reinterpret_cast<TAtomicBase>(to));
+ RawPtr.store(reinterpret_cast<intptr_t>(to));
if (from)
Ops::UnRef(from); // Unref() for old value
diff --git a/library/cpp/threading/hot_swap/ya.make b/library/cpp/threading/hot_swap/ya.make
index 73cc1694117..e86105d59dc 100644
--- a/library/cpp/threading/hot_swap/ya.make
+++ b/library/cpp/threading/hot_swap/ya.make
@@ -5,8 +5,4 @@ SRCS(
hot_swap.cpp
)
-PEERDIR(
- library/cpp/deprecated/atomic
-)
-
END()