Розглянемо веб-сайт електронної комерції, де Аліса та Боб редагують списки товарів. Аліса покращує описи, а Боб оновлює ціни. Вони починають редагувати віджет Acme Wonder одночасно. Боб закінчує перше місце і економить продукт новою ціною. Алісі потрібно трохи більше часу, щоб оновити опис, і коли вона закінчить, вона зберігає продукт своїм новим описом. На жаль, вона також переписує ціну зі старою ціною, яка не була призначена.
На мій досвід, ці питання надзвичайно поширені у веб-додатках. Деяке програмне забезпечення (наприклад, програмне забезпечення wiki) має захист від цього - зазвичай другий збереження не вдається "сторінка була оновлена під час редагування". Але більшість веб-сайтів не мають такого захисту.
Варто зазначити, що методи контролера самі по собі є потоковими. Зазвичай вони використовують транзакції бази даних, що робить їх безпечними в тому сенсі, що якщо Аліса і Боб спробують зберегти в той самий момент, це не спричинить корупції. Умова перегонів виникає у зв'язку з тим, що Аліса або Боб мають несвіжі дані у своєму браузері.
Як ми можемо запобігти таким умовам гонки? Зокрема, я хотів би знати:
- Які прийоми можна використовувати? наприклад, відстеження часу останньої зміни. Які плюси і мінуси кожного.
- Що корисне для користувачів?
- У які рамки вбудований цей захист?