C'è qualche ragione per aprire un file con accesso condiviso e scrittura?
-
12-09-2019 - |
Domanda
Ho sempre aperto i miei file in due modi -. Sia l'accesso in lettura e condiviso-leggere, o l'accesso in lettura / scrittura e nessuna condivisione
A me sembra che consentire condiviso-scrittura potrebbe sempre risultato in cose inaspettate che accadono al file mentre si sta leggendo. Ci sono buone ragioni per aprire un file in modalità condivisa e scrittura?
Soluzione
Se un file è condiviso da molti processi, a volte è poco pratico per bloccare l'intero file (per motivi di prestazioni).
In questo caso, è possibile bloccare una regione del file mentre è in fase di scrittura.
In Windows è possibile utilizzare la funzione LockFile () .
In Linux / Unix si potrebbe utilizzare fcntl () o flock ()
Altri suggerimenti
Ti azzardare un'ipotesi ... una cosa che può essere utilizzato per è per i calcoli paralleli. Diciamo che sono due thread facendo qualche calcolo altamente parallelizzabile ed è necessario che i dati vengano scritti in un unico file. Sei anche in grado di pre-determinare la dimensione necessaria per memorizzare l'output di ogni thread (per esempio 50 MB).
Quindi, assegnare un file di 100 MB, hanno discussione una scrittura inizio a offset 0 e filo # 2 partono da 50 MB. Quando i fili completare avrete il vostro unico file, composta (in caso contrario, utilizzando file separati, avresti bisogno di aggiungere il risultato di filo # 2 per infilare # 1).
ASCII Art Tentativo
==============================
| 50MB | 50MB | [100 MB Total FileSize]
| | |
==============================
^ ^
| |
Thread 1 Thread 2
Detto questo, non ho mai fatto questo. Si può anche non funzionare! Si può plausibilmente solo condividere il file maniglia / ruscello tra i thread utilizzando qualche altro meccanismo di sincronizzazione, ma poi si sarebbe necessario reimpostare anche l'offset su ogni thread. Forse uno o l'altro è più efficiente.
Da un lato ci potrebbe essere un sacco di botte disco se entrambi i fili sono sempre scrivendo simeltanouesly. Al contrario, la sincronizzazione delle operazioni di scrittura può negare i benefici della concorrenza, se c'è un sacco di contesa sul blocco di scrittura. E, come spesso si dice, il profilo e la prova!
In ogni modo, sono anche curioso di uno scenario di "vita reale", dove l'accesso in scrittura condiviso è stato utilizzato e verrà guardare per più risposte!
Prese su un livello inferiore rispetto a file di I / O.
Di 'un server in ascolto su qualche porta locale 1999 e il relè in entrata a tutti i clienti che sottoscrivono sulla porta di servizio 3128.
Il server in grado di leggere da più client locali e trasmettere a più client remoti. Se il server fosse un demone di autenticazione, più applicazioni locali potrebbero tentare di autenticarsi tramite lo stesso server (servizio). I client remoti possono essere comunicate che l'utente-x è ormai autenticato perché s / he il login con successo per una delle applicazioni di condivisione server di autenticazione.
Non so di cosa sto parlando. Sto avventurarsi a indovinare.