Trong Android, tôi có thể truy cập và sửa đổi một cách an toàn các loại nguyên thủy từ các luồng khác nhau. Tôi đã sử dụng tính năng này để chia sẻ dữ liệu giữa vòng lặp vẽ OpenGL và cài đặt người dùng đã được sửa đổi trong giao diện người dùng Android chính của luồng. Bằng cách lưu trữ từng thiết lập trong một kiểu nguyên thủy và làm cho mỗi giá trị độc lập với nhau, nó an toàn để sửa đổi tất cả các biến này mà không cần sử dụng khóa hoặc từ khóa đồng bộ hóa.Liệu nguyên tử thực sự có ý nghĩa gì đối với nguyên thủy tổng hợp?
Điều này cũng đúng trong Mục tiêu-C? Tôi đọc rằng việc đặt nguyên tử trên một biến cơ bản làm cho bộ thu thập tổng hợp và setter sử dụng khóa, tương tự như sử dụng các phương thức đồng bộ trong Java. Và tôi đã đọc rằng lý do cho điều này là vì vậy một đối tượng không được sửa đổi một phần trong khi nó được đọc bởi một chủ đề khác.
Nhưng các kiểu nguyên thủy có an toàn không bị sửa đổi một phần, vì chúng có trong Java không? Nếu đúng như vậy, có vẻ như tôi có thể sử dụng cùng một mô hình cũ của tôi từ Java để chia sẻ dữ liệu giữa các luồng. Nhưng sau đó các từ khóa nguyên tử sẽ là vô nghĩa cho một nguyên thủy, chính xác?
Tôi cũng đọc rằng một giải pháp mạnh mẽ hơn và nhanh hơn việc sử dụng các biến nguyên tử là sao chép các đối tượng trước khi sử dụng chúng nếu chúng được truy cập từ nhiều luồng. Nhưng tôi không chắc làm thế nào điều đó có thể được thực hiện. Không thể một đối tượng nonatomic được sửa đổi trong khi nó đang trong quá trình được sao chép, do đó làm hỏng bản sao?
tại sao không khai báo kiểu nguyên thủy với nguyên tử để đảm bảo an toàn luồng? – John
bản sao có thể có của [Thuộc tính nguyên tử so với nonatomic] (http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties) – bbum
@ user1256663 Tôi đã nghe chúng rất chậm và tôi đang viết Ứng dụng OpenGL. Mối lo ngại về khung hình. – Tenfour04