Publico mi comprensión del bloqueo de C# de la siguiente manera, ayúdenme a validar si lo hago bien o no.Uso de la palabra clave de bloqueo C#
public class TestLock
{
private object threadLock = new object();
...
public void PrintOne()
{
lock (threadLock)
{
// SectionOne
}
}
public void PrintTwo()
{
lock (threadLock)
{
// SectionTwo
}
}
...
}
Caso I> Thread1 y Thread2 al mismo tiempo trato de llamar Printone. Dado que PrintOne está protegido por el bloqueo de instancia, en cualquier momento, solo un hilo puede entrar exclusivamente en SectionOne.
¿Es esto correcto?
Caso II> Thread1 y Thread2 al mismo tiempo tratar de llamar Printone y PrintTwo respectivamente (es decir Thread1 llama Printone y Thread2 llama PrintTwo) ya que dos métodos de impresión son vigiladas por la misma cerradura ejemplo, en cualquier momento, solo un hilo puede acceder de forma exclusiva a SectionOne o SectionTwo, pero NO a ambos.
¿Es esto correcto?
Para resumir las respuestas a continuación: el código es seguro para subprocesos por única instancia. Cuando las instancias comparten recursos, @oleski tiene la respuesta correcta (= No) –
Y por lo tanto -1 por no incluir los datos/recursos compartidos. Por favor edita. –
Es un punto válido, pero la pregunta original no dice si las instancias están separadas o no y, por lo tanto, por la forma en que se escribe el código/pregunta, era seguro asumir que estaba hablando de las llamadas realizadas contra la misma instancia . Por lo tanto, no estoy de acuerdo con su voto negativo, pero esa es su expectativa. –