I programmi sono in conflitto quando entrambi tentano di utilizzare la stessa risorsa. Quando più programmi tentano di operare contemporaneamente su una risorsa, esiste il rischio di problemi di concorrenza . Problemi di concorrenza si verificano quando un processo esegue una modifica sulla risorsa e l'altro programma (che era nel mezzo la propria modifica alla risorsa) non ne è a conoscenza e quindi non è in grado di adattarsi.
Ecco alcuni esempi di problemi di concorrenza tra i libri di testo.
Problema Last-in-Wins
Immagina di utilizzare una directory FTP per condividere un documento in cui tu e un collega collaborate a un documento. scarichi il documento, lo modifichi e lo pubblichi di nuovo, così come il tuo collega.
- Si scarica il documento e si avvia una serie di modifiche che richiede 1 ora.
- Il tuo collega scarica il documento nello stesso momento in cui lo hai fatto, ma richiede solo mezz'ora per completare e ricaricare le modifiche.
Risultato: quando si carica il documento, si sovrascrivono le loro modifiche e si perdono.
Dati non aggiornati
Nello stesso scenario, il tuo collega apporta alcune modifiche di cui hai bisogno, senza dirtelo. la tua copia del file non presenta le modifiche,
Risultato: scrivi tu stesso le stesse modifiche in parole leggermente diverse, o peggio, spegni una brutta email su come manca.
Questo sembra uno scenario semplice, ma in casi avanzati come i database multi-accesso se si selezionano i record nello stesso millisecondo in cui qualcuno li sta aggiornando, si possono verificare seri problemi.
Calcolo errato
Una coppia di sposi ha un conto bancario condiviso e carte bancomat. Hanno 1000USD nel loro account. Nella loro vita quotidiana, si trovano dai lati opposti della città ed entrambi accedono allo sportello automatico nello stesso istante. Entrambi ritirano 1000 USD. Entrambi gli sportelli automatici sanno che il saldo è 1000, quindi consentono il prelievo, quindi scrivono nel database centrale che il nuovo saldo è 0.
Risultato: la banca è ora in uscita 1000 USD e non lo sa nemmeno.
In tutti questi esempi c'erano più parti che stavano eseguendo azioni su una risorsa condivisa nello stesso momento o nello stesso momento. Da qui i termini "concorrenza" o "sincronicità".
soluzioni
Esistono alcuni modi per affrontare questo tipo di problemi. Uno è quello di utilizzare software che arbitrano tra le molteplici parti che accedono alla risorsa. Questi programmi di arbitro hanno due opzioni, a seconda dell'ambito e della prevedibilità delle operazioni:
- Unisci le operazioni in modo intelligente
- Blocca / blocca una delle due operazioni fino al completamento della prima che viene notata.
È anche possibile bloccare / bloccare, a condizione che entrambi i programmi siano progettati per controllare un flag condiviso che indica lo stato della risorsa. questo generalmente richiede uno sviluppo personalizzato.
la tua risposta
Nel tuo caso specifico, Le risorse sono i file sul tuo disco. Synchronicity proviene da eventi come il file Read / Write, che attivano scansioni all'accesso in entrambi i programmi AV.
Windows funge da arbitro per risolvere i problemi di concorrenza del filesystem bloccando i file quando i programmi li aprono per operazioni specifiche.
Ciò significa che entrambi i programmi corrono per accedere al file e chi arriva per primo ottiene il blocco. A un livello basso, ciò si traduce in un blocco del disco quando entrambi i programmi iniziano le proprie attività di I / O, costringendo l'hardware a svolgere entrambe le attività separatamente, ma interfogliando le istruzioni IO, rendendo entrambi molto meno efficienti e, alla fine, solo uno di loro vincerà. l'altro girerà e attenderà di poter stabilire il proprio blocco.