He leído varios artículos y publicaciones que dicen que lock(this)
, lock(typeof(MyType))
, lock("a string")
son malas prácticas porque otro hilo podría bloquearse en la misma tecla y provocar un interbloqueo. Para entender este problema, estaba intentando crear un código de muestra para ilustrar el punto muerto, pero no he podido entender esto.Código de muestra para ilustrar un interbloqueo usando lock (this)
¿Alguien puede escribir un código conciso que ilustre este clásico problema? Por favor, mantenlo corto, puedo digerir código en trozos más pequeños solamente.
Editar: creo que resume lassevk él para arriba así; que el verdadero problema es que has perdido el control sobre tus bloqueos. Una vez que eso sucede, no puede controlar el orden en que se llaman los bloqueos, y está permitiendo una posible situación de punto muerto.
lock(this)
, lock(typeof(MyType))
, etc. todas son situaciones en las que ha elegido un bloqueo que es imposible de controlar.
aha, estaba escribiendo exactamente la misma muestra mientras lo publicabas :) pero he elegido long e int – Maghis
Muy buen ejemplo: un elemento clave en la creación de un interbloqueo está bloqueando dos recursos en ** DIFERENTES pedidos **. –
Sí, ese es el principio sobre el cual se construyen técnicas como el bloqueo nivelado y por qué son muy buenas para evitar interbloqueos. – Maghis