Bạn có thể giải thích điều này. Tệp ánh xạ bộ nhớ chỉ là một đoạn bộ nhớ trong chương trình của bạn mà byte có thể truy cập được bằng nhiều quá trình. Chúng khá lúng túng trong mã được quản lý vì đoạn này tồn tại ở một địa chỉ cụ thể. Mà đòi hỏi phải truy cập dữ liệu bằng cách sử dụng một con trỏ, họ là điều cấm kỵ trong mã được quản lý. MemoryMappedFileViewAccessor kết thúc tốt đẹp con trỏ đó, nó bản sao dữ liệu từ bộ nhớ được quản lý vào bộ nhớ dùng chung. Hãy lưu ý rằng điều này đánh bại lý do chính để sử dụng MMF và tại sao sự hỗ trợ của họ mất quá nhiều thời gian để hiển thị trong .NET. Hãy chắc chắn rằng bạn không muốn sử dụng các đường ống được đặt tên thay thế.
Vì vậy, lý do này ra, một MMF chắc chắn không phải là thread-an toàn bởi thiết kế vì đây là bộ nhớ chia sẻ, giống như các biến toàn cầu có trong mã của bạn. Mọi thứ diễn ra sai cùng một cách nếu các chủ đề đọc và viết cùng một phần của bộ nhớ dùng chung. Và bạn phải bảo vệ chống lại chính xác như vậy là tốt, một khóa để đảm bảo chỉ có một sợi có thể truy cập một phần được chia sẻ.
Cũng lưu ý rằng bạn cần triển khai khóa đó giữa các quy trình đọc và ghi MMF. Mà có xu hướng đau đớn, bạn phải sử dụng một mutex tên mà quá trình "master" tạo ra và quá trình "nô lệ" mở ra. Bạn không thể tiết kiệm được yêu cầu khóa đó. Đáng chú ý là bạn không bao giờ đề cập đến việc chăm sóc này trong câu hỏi của bạn, do đó, Red Flag ở đó.
Trong một quy trình, các chuỗi không truy cập vào cùng một phần của MMF không thể theo cách khác.Giống như hai chuỗi truy cập các biến số khác nhau không yêu cầu bất kỳ đồng bộ hóa nào. Miễn là chúng giữ được mutex để đảm bảo rằng một quá trình khác không thể ghi vào phần đó. Lưu ý rằng điều này có thể có nghĩa là bạn muốn sử dụng Semaphore để bảo vệ quyền truy cập MMF, một Mutex chỉ có thể được mua bởi một luồng.
Nguồn
2013-05-03 22:32:54
xử lý song song của bạn có liên quan đến việc sửa đổi tệp hoặc chỉ đọc từ tệp đó không? –
@CharlesLambert Không, việc xử lý dữ liệu liên quan đến hoạt động của accessor.Write hoặc accessor.Read mà về cơ bản là truy cập vào bộ nhớ ánh xạ. Bộ nhớ ánh xạ tập tin thực sự chăm sóc hoạt động tập tin. –