Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 2976|Respuesta: 2

[Fuente] Cómo es perezoso en C# que mantiene los hilos seguros

[Copiar enlace]
Publicado en 2/7/2023 21:41:55 | | |
Tras .NET 4.0, se proporcionó un tipo seguro de carga perezosa en el .NET FrameworkPerezoso
Lazy puede operar en un entorno multihilo, garantizadoGetValueLa función se ejecuta solo una vez, por lo que se implementaModo singleton

En el pasado, utilizábamos bloqueos de juicio cuadrático para implementar patrones singleton, o para utilizar funciones de inicialización estáticas de clases
Con el tipo Lazy este proceso se simplifica y el rendimiento mejora

Cuando se crea Lazy, puedes especificar el modo de instalación del hilo, actualmente hay dos modos,Solo publicaciónExplicacióny publicación

Modo PublicationOnly


1. Ejecuta la función de inicialización y encaja en un sistema internoCajatipo, resuelve el problema del juicio de valor nulo, si el caso ha sido creado, devolverá el juicio nulo,El proceso es inseguro respecto a los hilos

2. Determinar si el m_boxed está vacío, m_boxed es el campo guardado por valor; si es igual a vacío, se pone en cuadrado; este método puede asegurar atomicidad,El proceso es seguro para hilos

3. Si CreateValue devuelve vacío, significa que otros hilos ya han creado instancias, y luego se establecen en instancias ya creadas

4. Marcar el método de inicialización como inicializado, lo que suele ocurrir en el caso de ejecuciones concurrentes, y ejecutar CreateValue varias veces


Solo publicaciónse utiliza en función deInterbloqueado.CompareExchange, esta clase contiene métodos de atomicidadCAS (Comparar e intercambiar)

CAS se implementa usando instrucciones atómicas proporcionadas por la CPU, y diferentes versiones de ejecución pueden tener diferentes implementaciones
Implementación específica interconectada En el método nativo, los amigos interesados pueden comprobar la implementación específica mediante código coreclr/jvm

En este modo,Una función singleton puede ejecutarse varias veces, pero al final se garantiza que solo se obtendrá una instancia

Modo de excución y publicación

Explicacióny publicaciónModo utilizado en el modoVolatile+MonitorMonitorLo escerraduraLa implementación de la sentencia, la implementación Monitor en el código nativo, es un bloqueo de gran peso

MonitorSe soporta la suspensión de cola y de hilos, lo que puede garantizar que todo el bloque de método se ejecute en un estado de hilo único


Enlace original:El inicio de sesión del hipervínculo es visible.




Anterior:ASP.NET la diferencia entre ThreadStatic, CallContext y HttpContext
Próximo:SQL Server consulta el número actual de conexiones a la base de datos
 Propietario| Publicado en 2/7/2023 21:42:16 |
 Propietario| Publicado en 4/7/2023 19:19:45 |
Optimización de rendimiento en C#: Lazy inicializa Lazy<T> con un retardo
https://www.itsvse.com/thread-7700-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com