Hi guys: Các tài liệu cho clojure "nguyên tử" khẳng định rằng -điều kiện Race và Atoms clojure
"Changes to atoms are always free of race conditions."
However- một điều kiện chủng tộc được xác định không chỉ về một sự thay đổi, nhưng thay vào đó, trong bối cảnh các phép toán logic song song trong các luồng khác nhau.
Tôi tự hỏi - ý nghĩa của việc đảm bảo rằng "Các thay đổi đối với nguyên tử luôn miễn là điều kiện chủng tộc"? Trong java, chúng tôi có nguyên thủy nguyên tử, hỗ trợ một số hoạt động an toàn chủ đề cụ thể (ví dụ, AtomicInteger hỗ trợ một hoạt động "getAndIncrement"). Nhưng nguyên tử Clojure là loại-agnostic, ví dụ, chúng ta có thể gọi:
(atom "Hi im a string") Or
(atom (.getClass Object))
Tính linh hoạt của phương pháp nguyên tử có nghĩa là Clojure, dưới mui xe, không phải là "thông minh" cung cấp loại cụ thể nguyên tử/thread-safe hoạt động cho các nguyên tử.
Vì vậy, tôi sẽ hỏi - những gì chính xác là phương pháp nguyên tử "làm" với các đối tượng của chúng tôi
* "Các chức năng này được đảm bảo sẽ được thực thi tuần tự" * - đây không phải là những gì 'nguyên tử' đảm bảo. Sự đảm bảo thực tế là 'swap af' nhớ giá trị của' a', chuyển nó tới 'f' và nếu giá trị' a' sau 'f' được hoàn thành vẫn bằng giá trị cũ, sau đó nó được thay thế bằng kết quả của 'f'. Nhiều chức năng khác có thể đã được áp dụng cho 'a' trong thời gian chờ đợi, miễn là hiệu ứng của chúng bị hủy bỏ. –
@Rafal - cảm ơn vị trí tốt, tôi đã cập nhật câu trả lời chính xác hơn một chút. – mikera
@myself: So sánh cơ bản thực sự là Java == (nhận dạng đối tượng), vì vậy thay vì "bằng nhau" tôi nên viết 'giống hệt' và thay vì "hủy bỏ lẫn nhau" -> "để nguyên tử tham chiếu cùng một đối tượng" . –