RenderScript Atomik Güncelleme İşlevleri
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Genel bakış
Birden fazla iş parçacığı arasında paylaşılan değerleri güncellemek için aşağıdaki işlevleri kullanın.
Değerlerin atomik olarak güncellenmesini, yani bellek okumalarının, güncellemelerin ve bellek yazmalarının doğru sırada yapılmasını sağlarlar.
Bu işlevler, atomik olmayan eşdeğerlerinden daha yavaştır. Bu nedenle, bunları yalnızca senkronizasyon gerektiğinde kullanın.
RenderScript'te, açık bir şekilde oluşturmamış olsanız bile kodunuzun büyük olasılıkla ayrı iş parçacıkları halinde çalışacağını unutmayın. RenderScript çalışma zamanı genellikle bir çekirdeğin yürütülmesini birden fazla iş parçacığına böler. Genel güncelleme işlemi atomik işlevlerle yapılmalıdır. Mümkünse bunların tamamen önlenmesi için algoritmanızı değiştirin.
Özet
Fonksiyonlar
rsAtomicAdd
: İş parçacığı güvenli ekleme
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Eklenecek tutar. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomicly, addr’daki değere bir değer ekler, ör. *addr += value
.
rsAtomicAnd
: İş parçacığı güvenli bit tabanlı ve
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Kullanılan ve uygulanan değer. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomicly iki değerden oluşan bit tabanlı bir işlem gerçekleştirir ve sonucu alıcıda tekrar depolar (ör. *addr &= value
).
rsAtomicCas
: İş parçacığı güvenli karşılaştırma ve ayarlama
Parametreler
adr | Testin başarılı olması durumunda karşılaştırılacak ve değiştirilecek değerin adresi. |
karşılaştırmaDeğeri | *addr ile karşılaştırılacak değer. |
yeniDeğer | Testin başarılı olması durumunda yazılacak değer. |
İlerlemeler
İşlemden önceki *addr değeri. |
Adr öğesindeki değer karşılaştırValue ile eşleşirse newValue, addr değerine yazılır (ör. if (*addr == compareValue) { *addr = newValue; }
).
rsAtomicCas() tarafından döndürülen değerinComparisonValue olup olmadığını kontrol ederek değerin yazılıp yazılmadığını kontrol edebilirsiniz.
rsAtomicDec
: İş parçacığı güvenli azalma
Parametreler
adr | Azaltılacak değerin adresi. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomik olarak addaki değerden bir çıkarır. Bu, rsAtomicSub(addr, 1)
işlevine eşdeğerdir.
rsAtomicInc
: İş parçacığı güvenli artış
Parametreler
adr | Artırılacak değerin adresi. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomik olarak adrdaki değere bir tane ekler. Bu, rsAtomicAdd(addr, 1)
işlevine eşdeğerdir.
rsAtomicMax
: İş parçacığı güvenli maksimum
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Karşılaştırma değeri. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomicly, addr’daki değeri en yüksek *addr ve value (ör. *addr = max(*addr, value)
) değerine ayarlar.
rsAtomicMin
: İş parçacığı güvenli minimum
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Karşılaştırma değeri. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomicly, addr’daki değeri en düşük *addr ve value değerine ayarlar, ör. *addr = min(*addr, value)
.
rsAtomicOr
: İş parçacığı güvenli bit tabanlı veya
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Kullanılacak veya hariç tutulacak değer. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomik olarak bit tabanlı veya iki değer uygulayarak sonucu alıcıda (ör. *addr |= value
) saklar.
rsAtomicSub
: İş parçacığında güvenli çıkarma
Parametreler
adr | Değiştirilecek değerin adresi. |
value | çıkarılacak tutar. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomik olarak, alıcıdaki değerden bir değeri çıkarır, ör. *addr -= value
.
rsAtomicXor
: İş parçacığı güvenli bit tabanlı özel veya
Parametreler
adr | Değiştirilecek değerin adresi. |
value | Xorlanacak değer. |
İlerlemeler
İşlemden önceki *addr değeri. |
Atomicly, iki değerin bit tabanlı xor işlemlerini yaparak sonucu alıcıda depolar (ör. *addr ^= value
).
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2024-01-03 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2024-01-03 UTC."],[],[]]