Domanda

Nota : ho letto altri post su come bloccare e sbloccare un file. Non ho trovato nulla di speciale di cui non ero a conoscenza. Quindi inserirò qui il mio scenario in modo che qualcuno possa dare alcuni suggerimenti.

Nella mia esperienza, FileChannel.lock non garantisce la situazione di blocco e sblocco di un file quando oggetti diversi da più istanze di jvm stanno tentando di bloccare e aggiornare il file.

Lo scenario nella mia applicazione è: ci sono tre programmi separati che aggiornano un file. Tali programmi vengono eseguiti su diverse istanze jvm. Supponiamo che i programmi siano A, B e C e che il file sia F. Se A blocca il file F, B e C dovrebbero attendere il rilascio di F prima che uno degli altri programmi possa bloccarlo. Funziona bene se i programmi sono eseguiti sulla stessa istanza jvm. Purtroppo questo non funziona in più istanze jvm.

Ho avuto un'altra idea che era quella di avere un file flat in cui avrei indicato se F dovesse essere aggiornato. Il contenuto di quel file flat può essere BLOCCATO o SBLOCCATO. Il valore predefinito / iniziale sarebbe SBLOCCATO. Quindi, quando uno dei programmi vorrebbe aggiornare F, deve vedere il flag nel file flat. Se la bandiera indica BLOCCATO, dovrebbe attendere. In questo approccio, c'è un problema: cosa succede se più programmi aprono il file flat nello stesso momento e visualizzano " UNLOCKED " o due programmi che stavano aspettando che il file flat leggesse UNLOCKED e esattamente allo stesso tempo vedessero le letture del file "UNLOCKED"?

Qualche idea ragazzi?

È stato utile?

Soluzione

Se è necessario il blocco in un filesystem, è necessario creare una directory. La directory esiste significa "bloccato", la directory mancante significa sbloccata.

Il motivo è che la creazione e l'eliminazione delle directory devono essere operazioni atomiche in qualsiasi file system. Quindi, non appena due processi tentano di creare la stessa directory, uno di essi riceverà un errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top