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?

È stato utile?

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.

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