sámaforo, pestillo de cuenta regresiva, ciclinarrier

Tabla de contenido

一、samáforo

1. Introducción

2. Aplicación

3. Principio

Dos, pestillo de cuenta regresiva

Tres, barrera cíclica


一、samáforo

1. Introducción

Se utiliza un semáforo para limitar el límite superior de subprocesos que acceden a recursos compartidos al mismo tiempo. Puede entenderse como una fila de recordatorio en la entrada del estacionamiento, que indica cuántos espacios de estacionamiento hay, y solo cuando hay espacios de estacionamiento puede ingresar y estacionar.Samáforo es la función de administrar el límite superior de espacios de estacionamiento.

Antes de usarlo, se debe crear un nuevo objeto samáforo y luego el subproceso debe llamar al método de adquisición para obtener una licencia para ejecutarse; de ​​lo contrario, esperará en la cola de bloqueo.

2. Aplicación

Use la limitación actual del semáforo para bloquear el subproceso de solicitud durante el período máximo de acceso y libere la licencia después de que pase el período máximo. Por supuesto, solo es adecuado para limitar la cantidad de subprocesos de una sola máquina y solo limita la cantidad de subprocesos. , no la cantidad de recursos de subprocesos (como la cantidad de conexiones, etc.)

Usando el semáforo para implementar un conjunto de conexiones simple, en comparación con la implementación en el modo de disfrute, el rendimiento y la legibilidad son obviamente mejores

3. Principio

Constructor: necesitamos pasar el tamaño del semáforo al construir, que en realidad es el sincronizador aqs llamado , y luego asignar el estado a 3

Adquisición: cada vez que desee usarlo, llame al método y use cas para restar uno del número de estados. Cuando sea menor que 0, cree un nodo de cabecera en la cola de bloqueo y apunte a este nodo. Establezca la cabecera en -1.Es lo mismo que antes, que es una cola de bloque aqs.

Release: release obtendrá el estado y luego usará cas para agregar 1 al estado, hacer que el nodo principal sea -1 y cambiarlo a 0, luego activar el nodo sucesor y luego ver si puede obtener el bloqueo, y luego se despierta uno por uno, pero si no hay un número de modelo, ingresará a la cola nuevamente después de un ciclo

Dos, pestillo de cuenta regresiva

Bloqueo de cuenta regresiva, utilizado para la cooperación síncrona entre subprocesos, los parámetros de construcción se usan para inicializar el conteo de espera, await se usa para esperar a que el conteo vuelva a cero y la cuenta regresiva se usa para contar hacia atrás en uno

La capa inferior también mantiene un sincronizador heredado de AQS . El constructor también lo copia directamente al estado de aqs , pero a diferencia de otros sincronizadores, puede adquirir un bloqueo cuando el estado es 0 y se bloqueará cuando el estado sea mayor que 0 Cuando otros subprocesos ejecutan la liberación de la llamada, use cas para hacer el contador -1 .

Tres, barrera cíclica

Cercado de bucle, utilizado para la cooperación de subprocesos, esperando que los subprocesos alcancen un determinado conteo, configurando el conteo al construir y llamando al método await para esperar a que cada subproceso se ejecute en un momento determinado que debe sincronizarse, cuando el subproceso en espera se encuentra el número de conteo, continuar implementando

La ventaja sobre el bloqueo de cuenta regresiva es que puede ejecutarse en un bucle y la cuenta regresiva solo se puede usar una vez.

Supongo que te gusta

Origin blog.csdn.net/weixin_54232666/article/details/131367438
Recomendado
Clasificación