Voglio essere in grado di bloccare in base a una gerarchia di filesystem. Ad esempio:Blocchi mutex gerarchici in Java
filettatura 1:
lock("/");
doStuff();
unlock();
filettatura 2:
lock("/sub/foo");
doStuff();
unlock();
filetto 3:
lock("/sub/bar");
doStuff();
unlock();
Se filettatura 1 acquisisce la serratura prima poi fili 2 e 3 sarà essere bloccato fino a quando il Thread 1 non si sblocca. Tuttavia, se Thread 2 acquisisce prima il blocco, quindi Thread 3 dovrebbe essere in grado di eseguire contemporaneamente al thread 2. La regola generale è che se c'è un blocco su una directory padre, il thread deve bloccarsi.
Java ha qualcosa di integrato che può aiutare a risolvere questo? Voglio evitare di memorizzare un blocco per directory perché ci saranno centinaia di migliaia di directory.
+1 per una domanda molto interessante. La struttura della directory è stata specificata in anticipo oppure i "file" possono essere creati ad-hoc? Inoltre, qual è il sistema di priorità se un thread vuole ottenere la directory radice mentre molti altri thread cercano di ottenere singoli file?Il thread che vuole la root si affama appena, o c'è qualche tipo di garanzia che hai in mente? – templatetypedef
Suppongo che se Thread 2 acquisisce il lock, Thread 1 dovrebbe bloccare, giusto? – Irfy
Parte della motivazione alla base di questo è modificare il file system, in modo che i percorsi cambino continuamente. Non sono sicuro di come gestire la fame di thread ... è qualcosa che non ho davvero preso in considerazione. Suppongo che un meccanismo di blocco di lettura/scrittura potrebbe avvicinarsi a risolvere questo ed essere in grado di gestire thread non affamati. –