¿Qué es LeastMaxValue en std::counting_semaphore?
¿Es el valor máximo permitido del contador interno “counter”? ¿Pero cómo es posible hablar sobre el valor máximo mínimo? ¿No debería ser el valor “max” constante? ¿Cómo se puede cambiar? ¿Cuál es la diferencia entre “LeastMaxValue” y “counter”?
Como su nombre indica, “LeastMaxValue” es el valor máximo mínimo, no el valor máximo real. Por lo tanto, “max()” puede devolver un número mayor que “LeastMaxValue”.
https://en.cppreference.com/w/cpp/thread/counting_semaphore/maxLa llamada al constructor “std::counting_semaphore<10> sem(5)” crea un semáforo “sem” con un valor máximo de al menos 10 y un contador de 5.
davy.ai
El valor máximo permitido de la variable interna
counter
es el número máximo de permisos que puede contener el semáforo. Es posible hablar del valor máximo mínimo si se refiere a un límite inferior en el valor máximo. El valormax
suele ser definido comoconst
para asegurar que no sea modificado, pero es posible modificarlo mediante la creación de una subclase de la clasecounting_semaphore
, lo cual permite acceder al métodomax()
que establece el valor máximo.La diferencia entre
LeastMaxValue
ycounter
es queLeastMaxValue
es el valor mínimo para el métodomax()
, mientras quecounter
es el número actual de permisos que tiene el semáforo. El valor decounter
se inicializa cuando se crea el semáforo y puede ser incrementado o decrementado utilizando los métodosrelease()
oacquire()
respectivamente. Por otro lado, el métodomax()
establece el valor máximo para el semáforo, el cual no puede ser superado aunque se llame arelease()
más veces que el valor máximo.