Không, bạn vẫn cần phải xem xét an toàn luồng trong Erlang, nhưng các vấn đề đơn giản hơn nhiều để giải quyết.
Tôi đã đọc an article, trong đó tác giả đã chỉ ra rằng API tin nhắn của bạn có thể gây ra vấn đề về luồng. Ví dụ xoay quanh một tài khoản ngân hàng. API tin nhắn ban đầu của anh ta có các hoạt động GET và SET. Một số mã muốn gửi $ 100 sẽ nhận giá trị hiện tại, thêm 100 vào nó, và sau đó SET kết quả. Tất nhiên, điều này chỉ hoạt động nếu một quá trình duy nhất được truy cập vào tài khoản ngân hàng. Khi hai quy trình đang thao tác số dư, tất cả các cược sẽ bị tắt.
giải pháp của ông là thay đổi API nhắn gửi và rút (ông thực sự sử dụng một thông điệp - CẬP NHẬT - nhưng bạn sẽ có được ý tưởng). Điều này làm cho tương tác giả định ngữ nghĩa nguyên tử - quá trình lắng nghe sẽ chỉ xử lý một lần nạp tiền hoặc rút tiền tại một thời điểm và sẽ chặn các yêu cầu khác cho đến khi yêu cầu đầu tiên hoàn tất.
Nó đáng chú ý rằng vấn đề này là cơ bản giống như các vấn đề chia sẻ bộ nhớ. (Nếu chúng ta sử dụng các thông điệp GET và SET để tương tác với một tiến trình, chúng ta đã tạo ra một số bộ nhớ dùng chung). Một blogger khác là compares ets to shared memory. Tuy nhiên, miễn là bạn hiểu nơi bạn đã giới thiệu các cấu trúc giống như bộ nhớ chia sẻ và điều chỉnh quyền truy cập vào bộ nhớ chia sẻ đó, bạn không nên có bất kỳ vấn đề luồng nào (ngoài khóa bế tắc, dĩ nhiên).
Nguồn
2010-09-06 20:29:44
+1 chính xác ngay –
Nhưng bạn cần "xử lý an toàn" :) –