2010-12-27 31 views
7

Tôi là người mới trong lĩnh vực erlang, và erlang là lập trình theo hướng tương tranh, nó không có cấu trúc dữ liệu có thể thay đổi được, đó là lý do tại sao nó dễ dàng song song.Làm cách nào để truy cập tài nguyên được chia sẻ?

Tuy nhiên, tài nguyên được chia sẻ vẫn tồn tại, ví dụ: ghi vào cùng một tệp. trong trường hợp này, làm thế nào để đồng bộ hóa việc truy cập tài nguyên được chia sẻ giữa hai tiến trình?

Trả lời

11

Thông thường những gì bạn có thể làm là có một quy trình chịu trách nhiệm truy cập vào tài nguyên được chia sẻ. Các quy trình khác sẽ gửi thông điệp đến quy trình quản lý đơn lẻ để yêu cầu đọc hoặc ghi thông tin vào tài nguyên được chia sẻ.

Một số tài nguyên được chia sẻ (ví dụ: một số loại bảng ETS) có thể được đọc bởi nhiều quy trình nhưng chỉ một quy trình có thể ghi cho nó. Vì vậy, bạn có thể thiết lập một quá trình để serialise viết vào bảng nhưng để cho bất cứ ai đọc từ nó.

+0

Ngoài ra, từ kinh nghiệm của tôi, quy trình chịu trách nhiệm sắp xếp thứ tự yêu cầu thường được thực hiện như một máy chủ chung (gen_server): http://www.erlang.org/doc/man/gen_server.html. –

+1

Bạn có thể có nhiều người viết vào bảng ETS. Nó có một IIRC kế hoạch khóa-xô do đó nó là khá nhanh, trừ khi các quá trình khác nhau ghi các hoạt động va chạm. Một không gian Tuple là một sự tương tự tốt cho ETS. –

Các vấn đề liên quan