Todavía estoy confundido ... Cuando escribimos algo como esto:¿Bloquea() {} bloquea un recurso o bloquea un fragmento de código?
Object o = new Object();
var resource = new Dictionary<int , SomeclassReference>();
... y tienen dos bloques de código que se cierran o
mientras se accede a resource
...
//Code one
lock(o)
{
// read from resource
}
//Code two
lock(o)
{
// write to resource
}
Ahora, si tengo dos hilos, con un hilo que ejecuta el código que lee de resource
y otro escrito en él, me gustaría bloquear resource
de modo que cuando se está leyendo, el escritor tendría que esperar (y viceversa - si se está escribiendo, los lectores tendrían que esperar). ¿La construcción de bloqueo me ayudará? ... o debería usar algo más?
(estoy usando Dictionary
para los fines de este ejemplo, pero podría ser cualquier cosa)
Hay dos casos Estoy preocupado específicamente:
- dos hilos que tratan de ejecutar misma línea de código
- dos hilos que tratan de trabajar en el mismo recurso
Will lock
ayuda en ambas condiciones?
@SilverHorse: perdón por pisar fuerte en su edición, volvió a agregar una etiqueta y no se dio cuenta de que había editado mientras tanto! – Shog9