Các chương trình xung đột khi cả hai đều cố gắng sử dụng cùng một tài nguyên. Khi nhiều chương trình cố gắng hoạt động trên một tài nguyên cùng một lúc, sẽ có nguy cơ xảy ra sự cố đồng thời . Sự cố đồng thời xảy ra khi một quá trình thực hiện thay đổi tài nguyên và chương trình khác (nằm ở giữa sửa đổi tài nguyên của chính nó) không biết về nó và do đó không thể đáp ứng.
Dưới đây là một vài ví dụ về các vấn đề tương tranh trong sách giáo khoa.
Vấn đề cuối cùng
Hãy tưởng tượng bạn đang sử dụng một thư mục FTP để chia sẻ tài liệu mà bạn và đồng nghiệp đang cộng tác trên một tài liệu. bạn tải xuống tài liệu, chỉnh sửa nó và đăng lại, cũng như đồng nghiệp của bạn.
- Bạn tải xuống tài liệu và bắt đầu một tập hợp các thay đổi mất 1 giờ.
- Đồng nghiệp của bạn tải xuống tài liệu cùng lúc với bạn, nhưng chỉ mất nửa giờ để hoàn thành và tải lại các thay đổi của họ.
Kết quả: khi bạn tải lên tài liệu của mình, bạn sẽ ghi đè lên các thay đổi của chúng và chúng bị mất.
Dữ liệu cũ
Trong cùng một kịch bản, đồng nghiệp của bạn thực hiện một số thay đổi mà bạn cần, mà không cho bạn biết. bản sao của tập tin của bạn không có thay đổi,
Kết quả: Bạn tự viết những thay đổi tương tự bằng những từ hơi khác nhau, hoặc tệ hơn là bắn ra một email khó chịu về việc nó bị thiếu như thế nào.
Đây có vẻ là một kịch bản đơn giản, nhưng trong các trường hợp nâng cao như cơ sở dữ liệu đa truy cập nếu bạn chọn các bản ghi ở cùng một mili giây mà ai đó đang cập nhật chúng, bạn có thể gặp các vấn đề nghiêm trọng.
Tính toán xấu
Một cặp vợ chồng có một tài khoản ngân hàng và thẻ ATM chung. Họ có 1000USD trong tài khoản của họ. Trong cuộc sống hàng ngày, họ ở hai phía đối diện của thị trấn và cả hai truy cập ATM cùng một lúc. Cả hai đều rút 1000USD. Các máy ATM đều biết rằng số dư là 1000, vì vậy chúng cho phép rút tiền và sau đó ghi lại vào cơ sở dữ liệu trung tâm rằng số dư mới là 0.
Kết quả: ngân hàng hiện đã hết 1000USD và thậm chí không biết.
Trong tất cả các ví dụ này, có nhiều bên đang thực hiện các hành động trên một tài nguyên được chia sẻ cùng một lúc. Do đó, các thuật ngữ "đồng thời" hoặc "Đồng bộ hóa".
Các giải pháp
Có một vài cách để đối phó với các loại vấn đề này. Một là sử dụng phần mềm phân xử giữa nhiều bên truy cập tài nguyên. Các chương trình trọng tài này có hai tùy chọn, tùy thuộc vào phạm vi và khả năng dự đoán của các hoạt động:
- Hợp nhất các hoạt động một cách thông minh
- Chặn / khóa một trong hai thao tác cho đến khi thao tác đầu tiên được chú ý hoàn tất.
Cũng có thể chặn / khóa, miễn là cả hai chương trình được thiết kế để kiểm tra cờ chia sẻ cho biết trạng thái của tài nguyên. điều này thường đòi hỏi sự phát triển tùy chỉnh.
câu trả lời của bạn
Trong trường hợp cụ thể của bạn, Tài nguyên là các tệp trên đĩa của bạn. Tính đồng bộ xuất phát từ các sự kiện như Đọc / Ghi tệp, kích hoạt quét khi truy cập trong cả hai chương trình AV.
Windows hoạt động như một trọng tài để giải quyết các vấn đề đồng thời của hệ thống tệp bằng cách khóa các tệp khi các chương trình mở chúng cho các hoạt động cụ thể.
Điều này có nghĩa là cả hai chương trình đang chạy đua để truy cập tệp và bất kỳ ai đến đó trước tiên đều có khóa. Ở mức độ thấp, điều này dẫn đến một số lỗi đĩa khi cả hai chương trình bắt đầu các hoạt động I / O của riêng chúng, buộc phần cứng phải thực hiện cả hai tác vụ một cách riêng biệt, nhưng xen kẽ các hướng dẫn IO, làm cho cả hai hoạt động kém hiệu quả hơn và cuối cùng, chỉ có một trong số họ sẽ giành chiến thắng. người kia sẽ quay và chờ đợi để có thể thiết lập khóa riêng của họ.