46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
import threading
|
|
|
|
|
|
class Counter:
|
|
def __init__(self, start: int = 0) -> None:
|
|
super().__init__()
|
|
|
|
self.counter = start
|
|
|
|
def __next__(self) -> int:
|
|
i = self.counter
|
|
self.counter += 1
|
|
return i
|
|
|
|
def reset(self) -> None:
|
|
self.counter = 0
|
|
|
|
|
|
class AtomicCounter:
|
|
"""An atomic, thread-safe counter"""
|
|
|
|
def __init__(self, initial: int = 0) -> None:
|
|
"""Initialize a new atomic counter to given initial value"""
|
|
super().__init__()
|
|
|
|
self._value = initial
|
|
self._lock = threading.Lock()
|
|
|
|
@property
|
|
def value(self) -> int:
|
|
return self._value
|
|
|
|
def inc(self, num: int = 1) -> int:
|
|
"""Atomically increment the counter by num and return the new value"""
|
|
with self._lock:
|
|
self._value += num
|
|
return self._value
|
|
|
|
def dec(self, num: int = 1) -> int:
|
|
"""Atomically decrement the counter by num and return the new value"""
|
|
with self._lock:
|
|
self._value -= num
|
|
return self._value
|