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: 18907|Respuesta: 0

[Fuente] bloqueado? ¿Por qué solo puede bloquear la referencia pero no el tipo de valor?

[Copiar enlace]
Publicado en 8/12/2016 10:43:37 | | |

Si pasas un tipo de valor, se encaja y la próxima vez que el código se ejecute aquí, volverá a estar en caja y no será el mismo objeto dos veces, así que no puede bloquearse



Cerradura(x)
{
  ...
}

El bloqueo se realiza realmente a través del objeto Monitor:

Lo anterior es equivalente a:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
Prueba
{
  ...   
}
finalmente
{
  System.Threading.Monitor.Exit(obj);
}

Luego, citando las palabras originales de MSDN:
Usa Monitor para bloquear objetos (es decir, tipos de referencia), no tipos de valor. Cuando pasas una variable de tipo valor a Enter, se guarda como un objeto. Si pasas la misma variable a Enter de nuevo, se encaja como un objeto separado y el hilo no se bloquea. En este caso, el código que Monitor supuestamente protege no está protegido. Además, cuando pasas la variable a Salida, se crea otro objeto separado. Como el objeto pasado a Salida es diferente del objeto pasado a Enter, Monitor lanza SynchronizationLockException. Para más información, consulta el tema conceptual Monitores.




Anterior:Actualizar Python 2.6.6 a 2.7.5 en el sistema Centos 6.4
Próximo:Diferencia entre Directory.GetCurrentDirectory y Application.StartupPath
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