Funkcje aktualizacji atomowej w RenderScript
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Przegląd
Aby zaktualizować wartości udostępniane w wielu wątkach, użyj poniższych funkcji.
Zapewniają one aktualizację atomową wartości, co oznacza, że pamięć odczyty, aktualizacje i zapis są wykonywane we właściwej kolejności.
Te funkcje są wolniejsze od ich nieatomowych odpowiedników, więc używaj ich tylko wtedy, gdy potrzebna jest synchronizacja.
Pamiętaj, że w kodzie RenderScript Twój kod może działać w oddzielnych wątkach, nawet jeśli nie został on utworzony przez Ciebie. Środowisko wykonawcze RenderScript bardzo często dzieli wykonanie jednego jądra na wiele wątków. Globalne aktualizowanie musi być przeprowadzane za pomocą funkcji niepodzielnych. Jeśli to możliwe, zmień algorytm tak, aby całkowicie ich unikać.
Podsumowanie
Funkcje
rsAtomicAdd
: dodawanie bezpieczne w wątku
Parametry
addr | Adres wartości do zmiany. |
wartość | Kwota do dodania. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomicly dodaje wartość do wartości w addr, tj. *addr += value
.
rsAtomicAnd
: bezpieczne w wątkach i funkcje bitowe
Parametry
addr | Adres wartości do zmiany. |
wartość | Korzyści |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomic wykonuje zadanie bitowe na 2 wartości, zapisując wynik z powrotem w elemencie addr, tj. *addr &= value
.
rsAtomicCas
: porównanie i ustawienie w przypadku użycia w wątkach
Parametry
addr | Adres wartości do porównania i zastąpienia, jeśli test zakończy się pomyślnie. |
porównywanie wartości | Wartość do przetestowania *addr. |
nowa wartość | Wartość do zapisania, jeśli test się zakończy. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Jeśli wartość w obiekcie addr jest zgodna z wartością matchingValue, nowa wartość jest zapisywana w metodzie addr, tj. if (*addr == compareValue) { *addr = newValue; }
.
Aby sprawdzić, czy wartość została zapisana, sprawdź, czy wartość zwrócona przez funkcję rsAtomicCas() ma wartość allowValue.
rsAtomicDec
: zmniejszenie w wątku
Parametry
addr | Adres wartości do zmniejszania. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomic odejmuje 1 od wartości przy addr. Jest to odpowiednik rsAtomicSub(addr, 1)
.
rsAtomicInc
: przyrost w wątku
Parametry
addr | Adres wartości do przyrostu. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomic dodaje jeden do wartości w atrybucie addr. Jest to odpowiednik rsAtomicAdd(addr, 1)
.
rsAtomicMax
: maksimum w wątkach
Parametry
addr | Adres wartości do zmiany. |
wartość | Wartość porównawcza. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomicly ustawia wartość argumentu addr na maksymalną wartość z parametru *addr i wartości, tj. *addr = max(*addr, value)
.
rsAtomicMin
: minimalna wartość zapewniająca bezpieczeństwo w wątku
Parametry
addr | Adres wartości do zmiany. |
wartość | Wartość porównawcza. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomicly ustawia wartość argumentu addr na minimalną wartość *addr and value, tj. *addr = min(*addr, value)
.
rsAtomicOr
: bezpieczne w wątku, bitowe lub
Parametry
addr | Adres wartości do zmiany. |
wartość | Wartość do lub z. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Wykonaj działanie bitowe lub 2 wartości, przechowując wynik jako addr, np. *addr |= value
.
rsAtomicSub
: odejmowanie w wątkach
Parametry
addr | Adres wartości do zmiany. |
wartość | Kwota do odjęcia. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomic odejmuje wartość od wartości w punkcie dodawania, tj. *addr -= value
.
rsAtomicXor
: tylko dla bezpieczeństwa w wątkach lub tylko
Parametry
addr | Adres wartości do zmiany. |
wartość | Wartość xor. |
Zwroty
Wartość *addr przed wykonaniem operacji. |
Atomic wykonuje xor bitowy 2 wartości, zapisując wynik jako addr, tj. *addr ^= value
.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2024-04-02 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2024-04-02 UTC."],[],[]]