Quiero ser capaz de bloquear basado en una jerarquía del sistema de archivos. Por ejemplo:Bloqueos mutex jerárquicos en Java
Tema 1:
lock("/");
doStuff();
unlock();
Tema 2:
lock("/sub/foo");
doStuff();
unlock();
Tema 3:
lock("/sub/bar");
doStuff();
unlock();
Si el hilo 1 adquiere el bloqueo primero y luego los hilos 2 y 3 se estar bloqueado hasta que se abra el Tema 1. Sin embargo, si el Tema 2 primero adquiere el bloqueo, entonces el Tema 3 debería poder ejecutarse al mismo tiempo que el Tema 2. La regla general es que si hay un bloqueo en un directorio padre, entonces el hilo debe bloquearse.
¿Tiene Java algo incorporado que pueda ayudar a resolver esto? Quiero evitar almacenar un bloqueo por directorio porque habrá cientos de miles de directorios.
+1 por una pregunta muy interesante. ¿Se ha especificado la estructura del directorio por adelantado o se pueden crear "archivos" ad-hoc? Además, ¿cuál es el sistema de prioridad si un subproceso quiere obtener el directorio raíz mientras que muchos otros subprocesos intentan obtener archivos individuales?¿El hilo que quiere la raíz simplemente se muere de hambre, o hay algún tipo de garantía que tenga en mente? – templatetypedef
Supongo que si el hilo 2 adquiere el bloqueo, el hilo 1 debería bloquearse, ¿no? – Irfy
Parte de la motivación detrás de esto es modificar el sistema de archivos, por lo que las rutas cambiarían constantemente. No estoy seguro de cómo manejar la falta de hilo ... eso es algo que realmente no he considerado. Supongo que un mecanismo de bloqueo de lectura/escritura podría acercarse a resolver esto y ser capaz de manejar hilos no muertos de hambre. –