Bạn không có thể, nếu không có cơ chế đồng bộ - bởi lần thứ hai hoàn thành kiểm tra của nó và bắt đầu đọc tệp, FIRST có thể đã bắt đầu viết lại. Bạn cần một số loại khóa hoặc mutex.
Hai tùy chọn cho cơ sở Matlab.
Nếu đây là hệ thống tệp cục bộ, bạn có thể sử dụng tệp khóa riêng biệt bên cạnh tệp dữ liệu để quản lý quyền truy cập đồng thời vào tệp dữ liệu. Sử dụng các đối tượng FileChannel và FileLock của Java từ bên trong Matlab để khóa byte đầu tiên của tệp khóa và sử dụng nó như một semaphore để kiểm soát quyền truy cập vào tệp dữ liệu, do đó người đọc đợi cho đến khi người viết hoàn tất và ngược lại. (Nếu đây là hệ thống tập tin mạng, đừng thử điều này - khóa tệp có vẻ hoạt động nhưng thường không được hỗ trợ chính thức và trong kinh nghiệm của tôi không đáng tin cậy.)
Hoặc bạn có thể thử/nắm bắt xung quanh load()
gọi và tạm dừng một vài giây và thử lại nếu bạn gặp lỗi tệp bị hỏng. Các định dạng tập tin .mat là như vậy mà bạn sẽ không nhận được một phần đọc nếu nhà văn vẫn viết nó; bạn sẽ nhận được lỗi tập tin bị hỏng. Vì vậy, bạn có thể sử dụng điều này như là một loại phát hiện va chạm lười biếng và backoff. Đây là những gì tôi thường làm.
Để giảm cửa sổ tranh chấp, hãy cân nhắc việc FIRST ghi vào một tệp tạm thời trong cùng một thư mục và sau đó sử dụng tên đổi để di chuyển đến đích cuối cùng. Bằng cách đó, tệp chỉ không khả dụng trong quá trình di chuyển hệ thống tệp nhanh, không phải 20 giây ghi dữ liệu. Nếu bạn có nhiều người viết, hãy gắn PID và tên máy chủ trong tên tệp tạm thời để tránh va chạm.
Nguồn
2012-01-12 18:14:42
Bạn có đang sử dụng Hộp công cụ tính toán song song không? –