Considera un sito di e-commerce, in cui Alice e Bob stanno entrambi modificando le schede di prodotto. Alice sta migliorando le descrizioni, mentre Bob sta aggiornando i prezzi. Iniziano a modificare Acme Wonder Widget allo stesso tempo. Bob finisce prima e salva il prodotto con il nuovo prezzo. Alice impiega un po 'più di tempo ad aggiornare la descrizione e quando finisce, salva il prodotto con la sua nuova descrizione. Purtroppo, ha anche sovrascritto il prezzo con il vecchio prezzo, che non era previsto.
Nella mia esperienza, questi problemi sono estremamente comuni nelle app web. Alcuni software (ad esempio il software wiki) hanno una protezione contro questo - di solito il secondo salvataggio fallisce con "la pagina è stata aggiornata mentre stavi modificando". Ma la maggior parte dei siti web non ha questa protezione.
Vale la pena notare che i metodi del controller sono sicuri per i thread. Solitamente usano transazioni di database, che li rendono sicuri nel senso che se Alice e Bob cercano di salvare nello stesso momento, non causeranno corruzione. Le condizioni di competizione derivano da Alice o Bob che hanno dati obsoleti nel loro browser.
Come possiamo prevenire tali condizioni di gara? In particolare, mi piacerebbe sapere:
- Quali tecniche possono essere utilizzate? per esempio. tenere traccia del tempo dell'ultima modifica. Quali sono i pro e i contro di ciascuno.
- Che esperienza utente utile?
- In che framework è integrata questa protezione?