W systemie Android mogłem bezpiecznie uzyskiwać dostęp i modyfikować typy pierwotne z różnych wątków. Używałem tego do udostępniania danych między moją pętlą rysowania OpenGL a ustawieniami użytkownika, które zostały zmodyfikowane w głównym interfejsie Androida dla Androida. Przechowując każde ustawienie w typie pierwotnym i czyniąc je niezależnymi od wartości innych, modyfikowanie wszystkich tych zmiennych bez użycia blokad lub słowa kluczowego synchronizacji było bezpieczne dla wątków.Czy jądro atomowe ma znaczenie dla syntetyzowanego prymitywu?
Czy jest tak również w Objective-C? Czytałem, że umieszczenie atomu na zmiennej zasadniczo powoduje, że syntetyzowany program pobierający i ustawiający używa blokad, podobnie jak przy użyciu metod synchronizowanych w Javie. I przeczytałem, że powodem jest to, że obiekt nie jest częściowo modyfikowany, gdy jest czytany przez inny wątek.
Ale czy typy pierwotne mogą być częściowo zmodyfikowane, tak jak w Javie? Jeśli tak jest, wydaje się, że mógłbym używać mojego starego paradygmatu z Javy do udostępniania danych między wątkami. Ale słowo atomowe byłoby bezcelowe dla prymitywnego, prawda?
Przeczytałem również, że bardziej niezawodnym i szybszym rozwiązaniem niż używanie zmiennych atomowych jest kopiowanie obiektów przed ich użyciem, jeśli są dostępne z wielu wątków. Ale nie jestem pewien, jak można to osiągnąć. Czy obiekt nieatomowy nie może zostać zmodyfikowany podczas kopiowania, co powoduje uszkodzenie kopii?
dlaczego nie zadeklarować typu pierwotnego z atomowym, aby zapewnić bezpieczeństwo wątku? – John
możliwy duplikat właściwości [Atomic vs nonatomic] (http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties) – bbum
@ user1256663 Słyszałem, że są bardzo powolne, a ja piszę Aplikacja OpenGL. Obawy dotyczące framerate. – Tenfour04