Trong hệ thống phân tán, vì các user chia sẻ file với nhau nên cần phải xác định các có chế đọc ghi phù hợp để tránh gây ra lỗi. Nếu là một hệ thống phân tán với chỉ một file server và các client không có các file cache thì tất cả các thao tác đọc ghi đều đến trực tiếp file server một cách tuần tự, ngoại trừ trường hợp do trễ trên đường truyền làm cho thao tác đọc đáng ra đến sau thao tác ghi nhưng lại đến trước và đọc được giá trị cũ.
Trong thực tế, vì performance của hệ thống mà tất cả các yêu cầu file đều phải tới một server đơn là rất thấp, nên các client thường duy trì các file hay dùng vào bộ nhớ cache riêng.
Hình 1.21: (a) Trong hệ thống một bộ xử lí, khi thao tác đọc đến sau thao tác ghi thì giá trị đọc được sẽ là giá trị mới nhất. (b) trong hệ thống phân tán với cache, có thể thao tác đọc lấy về giá trị cũ.
Hình 1.21 là một ví dụ về chia sẻ file trong hệ thống phân tán dùng cache tại các client. Nếu một client thay đổi nội dung một file trên cache của mình và ngay sau đó một client khác đọc file này từ server, client này sẽ nhận được
file với nội dung cũ. Giải pháp cho vấn đề này là phải thông báo ngay các
thay đổi về nội dung file cho server, dù về nguyên tắc là đơn giản, nhưng phương pháp này rất khó thực hiện và không hiệu quả. Một giải pháp khác là khi một tiến trình thay đổi nội dung một file thì các thay đổi đó chỉ có tác dụng đối với riêng tiến trình này, còn các tiến trình khác chỉ nhận ra sự thay đổi nội dung file khi tiến trình làm thay đổi file kết thúc và thực hiện thao tác đóng file. Khi tiến trình này đóng file, nó sẽ gửi những thay đổi này tới server để các thao tác đọc sau sẽ được trả về giá trị mới nhất. Nếu có nhiều tiến trình cùng thực hiện thay đổi nội dung file thì tiến trình nào gửi giá trị thay đổi về server cuối cùng sẽ được xem là giá trị đã thay đổi của file.
Trong các hệ thống UNIX, mỗi một file mở ra thường có một con trỏ để xác định vị trí hiện thời trong file, thao tác đọc sẽ lấy dữ liệu bắt đầu từ vị trí con trỏ, thao tác ghi sẽ bắt đầu đặt dữ liệu vào vị trí con trỏ này. Con trỏ này được chia sẻ trong tiến trình mở file và tất cả các tiến trình con của nó, khi các tiến trình con này chạy trên các máy khác nhau thì không thể thực hiện chia sẻ con trỏ file như vậy.
Giả sử thực hiện một tiến trình gồm 2 câu lệnh a và b, thứ tự thực hiện lần lượt bắt đầu từ a sau đó đến b, đầu ra của b sẽ theo sau đầu ra của a. Khi b bắt đầu chạy, nó sẽ nhận con trỏ file từ a, tức là byte đầu tiên mà b ghi lên file sẽ theo ngay sau byte đã được a ghi trước đó.
Một phương pháp khác cũng được dùng trong các hệ thống phân tán là không cho phép mở file để ghi mà chỉ cho phép tạo file mới rồi ghi đè lên file cũ khi có yêu cầu. Nếu file đó đang được đọc thì có thể để tiến trình tiếp tục đọc file cũ hoặc ngừng thao tác đọc này.
Cách khác để thực hiện chia sẻ file trong hệ thống phân tán là sử dụng các giao dịch nguyên tử. Khi truy suất file, đầu tiên tiến trình phải thực hiện hàm nguyên thuỷ BEGIN TRANSACTION để thông báo rằng các hàm tiếp sau sẽ không thể chia sẻ được, sau đó sẽ thực hiện các thao tác đọc ghi file, sau khi hoàn thành sẽ thực hiện hàm nguyên thuỷ END TRANSACTION. Đặc điểm quan trọng của phương pháp này là hệ thống sẽ đảm bảo rằng tất cả các lời gọi trong giao dịch này sẽ được thực hiện một cách có thứ tự mà không ảnh hưởng đến các tiến trình đang hoạt động khác.
Ví dụ, tài khoản của một ngân hàng có 100 đô la, và có 2 tiến trình định thêm 100 đô la vào tài khoản này. Bằng cách đưa cả 2 tiến trình này vào một giao dịch ta sẽ tránh được trường hợp rủi ro là chỉ một tiến trình thực hiện được việc thêm tiền vào tài khoản.