Cũ câu hỏi, nhưng nếu tôi có thể thêm vào @ câu trả lời Mehdrad, từ một quan điểm hơi khác nhau ...
Trên Windows, xóa một tập tin thường thậm chí không hoàn toàn đồng bộ, và nó không phải là ngay cả một hoạt động đơn lẻ. Theo nghĩa đó, nó chắc chắn không phải nguyên tử.
Nếu bạn nhìn vào các công cụ như process monitor hoặc xem tài liệu MSFT để viết trình điều khiển hệ thống tệp, bạn sẽ nhận thấy rằng để xóa tệp trên Windows là một quy trình nhiều bước. Trước tiên, bạn cần xử lý tệp. Sau đó, bạn đặt bố cục của nó thành "đã xóa". Điều này đặt tệp ở trạng thái có tệp "xóa đang chờ xử lý". Tệp thậm chí sẽ không bị xóa khỏi chế độ xem cho đến khi tay cầm cuối cùng bị đóng. Khi một tệp ở trạng thái này, các lần thử mở tệp mới sẽ không thành công với STATUS_DELETE_PENDING
. Tình trạng này là nhiều hơn một điều thời gian chạy - nếu bạn kéo các plug hoặc đã làm một khởi động lại các tập tin sẽ không ở trong trạng thái đó. Vì vậy, nó có thể hoặc có thể không liên quan đến cách bạn đang sử dụng xóa, nhưng điều quan trọng cần lưu ý rằng trên Windows xóa sẽ không cần thiết có hiệu lực ngay lập tức và theo truy cập đồng thời có thể khóa thêm yêu cầu ra khỏi tập tin.
Để làm rõ: Như đã giải thích, quy trình thời gian chạy để xóa tệp không phải là nguyên tử vì nó bao gồm nhiều bước. Tuy nhiên, hành động thực tế trong hệ thống tập tin (NTFS) _is_ nguyên tử, do đó việc xóa hoặc là thể chất được thực hiện như một tổng thể hay không. – mafu
@mafutrct - Tôi không đồng ý với đánh giá của bạn. Như tôi đã đề cập xóa một tập tin trên NT là một quá trình nhiều bước và có thể được quan sát để không hoàn thành cho đến khi xử lý cuối cùng cho tập tin được giảm xuống. – asveikau
Có, nhưng những thay đổi vật lý đối với hệ thống tệp (trái ngược với các bước thay đổi ảo trong RAM bạn giải thích) hoạt động nguyên tử, nếu tôi hiểu điều này một cách chính xác. Đó là, không có vấn đề khi trong quá trình xóa dưới NTFS bạn ngắt hệ thống, nhà nước sẽ nhất quán - các tập tin hoặc là sẽ bị xóa hoàn toàn, hoặc nó sẽ không bị xóa ở tất cả. Tôi tin rằng điều này là quan trọng, vì nếu nó không phải là trường hợp quá trình xóa một tập tin sẽ phải được xử lý rất khác nhau trong mã người dùng. "Nguyên tử" có lẽ là một thuật ngữ hơi gây hiểu nhầm cho toàn bộ ý tưởng đó. – mafu