Hãy xem xét một trang web thương mại điện tử, nơi Alice và Bob đều đang chỉnh sửa danh sách sản phẩm. Alice đang cải thiện mô tả, trong khi Bob đang cập nhật giá. Họ bắt đầu chỉnh sửa Acme Wonder Widget cùng một lúc. Bob hoàn thành đầu tiên và tiết kiệm sản phẩm với giá mới. Alice mất nhiều thời gian hơn để cập nhật mô tả và khi hoàn thành, cô lưu sản phẩm với mô tả mới. Thật không may, cô cũng ghi đè lên giá với giá cũ, không có ý định.
Theo kinh nghiệm của tôi, những vấn đề này cực kỳ phổ biến trong các ứng dụng web. Một số phần mềm (ví dụ phần mềm wiki) có bảo vệ chống lại điều này - thường thì lần lưu thứ hai không thành công với "trang đã được cập nhật trong khi bạn đang chỉnh sửa". Nhưng hầu hết các trang web không có sự bảo vệ này.
Điều đáng chú ý là bản thân các phương thức của bộ điều khiển đều an toàn cho luồng. Thông thường họ sử dụng các giao dịch cơ sở dữ liệu, điều này làm cho chúng an toàn theo nghĩa là nếu Alice và Bob cố gắng lưu vào cùng một thời điểm chính xác, điều đó sẽ không gây ra tham nhũng. Điều kiện cuộc đua phát sinh từ Alice hoặc Bob có dữ liệu cũ trong trình duyệt của họ.
Làm thế nào chúng ta có thể ngăn chặn các điều kiện chủng tộc như vậy? Đặc biệt, tôi muốn biết:
- Những kỹ thuật có thể được sử dụng? ví dụ theo dõi thời gian thay đổi cuối cùng Những ưu và nhược điểm của mỗi.
- Trải nghiệm người dùng hữu ích là gì?
- Những khung nào có sự bảo vệ này được xây dựng trong?