Estoy tratando de bloquear un objeto "en caja" en una aplicación C#, ¿no es esto posible?C# threading - Bloquear Objeto
class t
{
System.Object t_x = new object();
public t(int p)
{
t_x = p;
}
public void w()
{
lock (t_x)
{
for (int i = 0; i < 4; i++)
{
{
t_x = ((int)t_x) + 1;
Console.WriteLine(t_x);
Thread.Sleep(1000);
}
}
}
}
}
En otra clase que pueda empezar a 2 hilos:
Thread b1 = new Thread(new ThreadStart(t1.w));
b1.Start();
Thread b2 = new Thread(new ThreadStart(t1.w));
b2.Start();
Sin embargo, la parte que no está bloqueado. Cuando bloqueo un objeto arbitrario (es decir, uno creado y no modificado como objeto a = new object()) se bloquea bien. ¿La operación de boxeo de alguna manera "deprociona" mi Objeto?
¿Por qué volver a asignar el objeto de bloqueo dentro de un bloque de bloqueo? Eso frustra el propósito, ya que el objetivo de la sincronización es evitar que los subprocesos se pisoteen entre sí para obtener un recurso "compartido". – Gishu
Creo que la respuesta acepto no es la buena –
Parece haber un error recurrente entre los que intentan con menos frecuencia .Net threading que la instrucción de bloqueo en realidad "bloquea" o protege el objeto al que se llama el bloqueo. Parecen pasar por alto el hecho de que el objeto es realmente la clave de un bloque bloqueado de código, la sección crítica. –