Nếu mã được thực thi trong một tệp có bị khóa hay không là do thiết kế quyết định và MS chỉ đơn giản là quyết định khóa, bởi vì nó có lợi thế rõ ràng trong thực tế: Bằng cách đó, bạn không cần biết mã trong phiên bản nào được ứng dụng nào sử dụng. Đây là một vấn đề lớn với hành vi mặc định của Linux, mà hầu hết mọi người đều bỏ qua. Nếu các lib trên toàn hệ thống được thay thế, bạn không thể dễ dàng biết ứng dụng nào sử dụng mã của các lib như vậy, hầu hết những lần tốt nhất bạn có thể nhận được là trình quản lý gói biết một số người dùng của các lib đó và khởi động lại chúng. Nhưng điều đó chỉ hoạt động đối với những thứ chung chung và biết rõ như có thể là Postgres và các lib của nó hoặc tương tự. Các tình huống thú vị hơn là nếu bạn phát triển ứng dụng của riêng mình chống lại một số lib của bên thứ 3 và những ứng dụng đó bị thay thế, bởi vì hầu hết các trường hợp trình quản lý gói chỉ đơn giản là không biết ứng dụng của bạn. Và đó ' Không chỉ là vấn đề của mã C gốc hoặc như vậy, nó có thể xảy ra với hầu hết mọi thứ: Chỉ cần sử dụng httpd với mod_perl và một số Perl libs được cài đặt bằng trình quản lý gói và để trình quản lý gói cập nhật những Perl lib đó vì bất kỳ lý do gì. Nó sẽ không khởi động lại httpd của bạn, đơn giản vì nó không biết các phần phụ thuộc. Có rất nhiều ví dụ như ví dụ này, đơn giản vì bất kỳ tệp nào cũng có thể chứa mã được sử dụng trong bộ nhớ trong bất kỳ thời gian chạy nào, hãy nghĩ đến Java, Python và tất cả những thứ như vậy.
Vì vậy, có lý do chính đáng để có ý kiến rằng khóa tệp theo mặc định có thể là một lựa chọn tốt. Tuy nhiên, bạn không cần phải đồng ý với những lý do đó.
Vậy MS đã làm gì? Họ chỉ đơn giản là tạo ra một API để cho ứng dụng gọi điện có cơ hội quyết định xem tệp có nên bị khóa hay không, nhưng họ quyết định rằng giá trị mặc định của API này là cung cấp một khóa độc quyền cho ứng dụng gọi đầu tiên. Hãy xem API xung quanh CreateFile và dwShareMode
đối số của nó . Đó là lý do tại sao bạn không thể xóa tệp đang được sử dụng bởi một số ứng dụng, nó chỉ đơn giản là không quan tâm đến trường hợp sử dụng của bạn, sử dụng các giá trị mặc định và do đó, Windows đã khóa riêng một tệp.
Vui lòng không tin vào những người nói với bạn điều gì đó về việc Windows không sử dụng số lần tham chiếu trên HANDLEs hoặc không hỗ trợ Liên kết cứng hoặc tương tự, điều đó hoàn toàn sai. Hầu hết mọi API sử dụng HANDLEs đều ghi lại hành vi của nó liên quan đến việc đếm tham chiếu và bạn có thể dễ dàng đọc trong hầu hết các bài viết về NTFS mà nó trong chứng thư có hỗ trợ Liên kết cứng và luôn làm như vậy. Kể từ khi Windows Vista nó cũng hỗ trợ Symlinks và Hỗ trợ cho Hardlinks đã được cải thiện bằng cách cung cấp các API để đọc tất cả các API đó cho một tệp nhất định, v.v.
Ngoài ra, bạn có thể chỉ muốn xem các cấu trúc được sử dụng để mô tả tệp trong Ext4 so với cấu trúc của NTFS , chúng có rất nhiều điểm chung. Cả hai đều hoạt động với khái niệm phạm vi, phân tách dữ liệu khỏi các thuộc tính như tên tệp và inodes gần như chỉ là một tên khác của một khái niệm cũ hơn, nhưng tương tự về điều đó. Ngay cả Wikipedia cũng liệt kê cả hai hệ thống tệp trong bài viết của mình .
Thực sự có rất nhiều FUD xung quanh việc khóa tệp trong Windows so với các hệ điều hành khác trên mạng, giống như về chống phân mảnh. Một số FUD này có thể được loại trừ bằng cách đọc một chút trên Wikipedia .