RenderScript के ऐटॉमिक अपडेट फ़ंक्शन

खास जानकारी

एक से ज़्यादा थ्रेड के बीच शेयर की गई वैल्यू अपडेट करने के लिए, नीचे दिए गए फ़ंक्शन का इस्तेमाल करें. इससे यह पक्का होता है कि वैल्यू एक साथ अपडेट की गई हों. इसका मतलब है कि मेमोरी को पढ़ने, अपडेट करने, और मेमोरी में लिखने की प्रोसेस सही क्रम में की गई हो.

ये फ़ंक्शन, अपने नॉन-एटॉमिक फ़ंक्शन के मुकाबले धीमे होते हैं. इसलिए, इनका इस्तेमाल सिर्फ़ तब करें, जब सिंक करने की ज़रूरत हो.

ध्यान दें कि RenderScript में, आपका कोड अलग-अलग थ्रेड में चल सकता है. भले ही, आपने उन्हें साफ़ तौर पर न बनाया हो. RenderScript के रनटाइम में, अक्सर एक कोर को कई थ्रेड में बांटकर चलाया जाता है. ग्लोबल वैल्यू को अपडेट करने के लिए, एटॉमिक फ़ंक्शन का इस्तेमाल करना चाहिए. अगर हो सके, तो इनसे पूरी तरह से बचने के लिए अपने एल्गोरिदम में बदलाव करें.

खास जानकारी

फ़ंक्शन
rsAtomicAdd थ्रेड-सेफ़ जोड़ना
rsAtomicAnd थ्रेड-सेफ़ बिटवाइज़ ऐंड
rsAtomicCas थ्रेड-सेफ़ तुलना और सेट
rsAtomicDec थ्रेड-सेफ़ घटाना
rsAtomicInc थ्रेड-सेफ़ इंक्रीमेंट
rsAtomicMax थ्रेड-सेफ़ मैक्सिमम
rsAtomicMin थ्रेड-सेफ़ मिनिमम
rsAtomicOr थ्रेड-सेफ़ बिटवाइज़ या
rsAtomicSub थ्रेड-सेफ़ घटाना
rsAtomicXor थ्रेड-सेफ़ बिटवाइज़ एक्सक्लूज़िव या

फ़ंक्शन

rsAtomicAdd : थ्रेड-सेफ़ जोड़ना

int32_t rsAtomicAdd(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicAdd(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानजोड़ने के लिए रकम.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr, यानी *addr += value में मौजूद वैल्यू में एक साथ एक वैल्यू जोड़ता है.

rsAtomicAnd : थ्रेड-सेफ़ बिटवाइज़ ऐंड

int32_t rsAtomicAnd(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicAnd(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानवैल्यू के लिए और साथ में.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

यह फ़ंक्शन, दो वैल्यू के बीच बाइटवाइज़ ऐंड करता है. साथ ही, नतीजे को addr, यानी *addr &= value में सेव करता है.

rsAtomicCas : थ्रेड-सेफ़ तुलना और सेट करना

int32_t rsAtomicCas(volatile int32_t* addr, int32_t compareValue, int32_t newValue); एपीआई लेवल 14 में जोड़ा गया
uint32_t rsAtomicCas(volatile uint32_t* addr, uint32_t compareValue, uint32_t newValue); एपीआई लेवल 14 में जोड़ा गया
पैरामीटर
addrवैल्यू का पता, जिसकी तुलना की जानी है और टेस्ट पास होने पर बदली जानी है.
compareValue*addr की जांच करने के लिए वैल्यू.
newValueटेस्ट पास होने पर लिखी जाने वाली वैल्यू.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

अगर addr में मौजूद वैल्यू, compareValue से मेल खाती है, तो addr में नई वैल्यू लिखी जाती है, यानी if (*addr == compareValue) { *addr = newValue; }.

यह जांचा जा सकता है कि वैल्यू लिखी गई है या नहीं. इसके लिए, यह देखें कि rsAtomicCas() फ़ंक्शन से मिली वैल्यू, compareValue है या नहीं.

rsAtomicDec : थ्रेड-सेफ़ घटाना

int32_t rsAtomicDec(volatile int32_t* addr); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicDec(volatile uint32_t* addr); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrघटाई जाने वाली वैल्यू का पता.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr में मौजूद वैल्यू में से एक को एक बार में घटाता है. यह rsAtomicSub(addr, 1) के बराबर है.

rsAtomicInc : थ्रेड-सेफ़ इंक्रीमेंट

int32_t rsAtomicInc(volatile int32_t* addr); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicInc(volatile uint32_t* addr); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrजिस वैल्यू को बढ़ाना है उसका पता.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr पर मौजूद वैल्यू में एक जोड़ता है. यह rsAtomicAdd(addr, 1) के बराबर है.

rsAtomicMax : थ्रेड-सेफ़ मैक्सिमम

int32_t rsAtomicMax(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
uint32_t rsAtomicMax(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 14 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानतुलना करने की वैल्यू.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr पर वैल्यू को *addr और वैल्यू, यानी *addr = max(*addr, value) में से सबसे ज़्यादा वैल्यू पर सेट करता है.

rsAtomicMin : थ्रेड के हिसाब से कम से कम

int32_t rsAtomicMin(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
uint32_t rsAtomicMin(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 14 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानतुलना करने की वैल्यू.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr पर मौजूद वैल्यू को, *addr और वैल्यू में से सबसे कम वैल्यू पर सेट करता है. जैसे, *addr = min(*addr, value).

rsAtomicOr : थ्रेड-सेफ़ बिटवाइज़ या

int32_t rsAtomicOr(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicOr(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानवैल्यू के लिए या उसमें.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

एक साथ दो वैल्यू पर बाइनरी ऑपरेशन करें और नतीजे को addr, यानी *addr |= value पर सेव करें.

rsAtomicSub : थ्रेड-सेफ़ घटाना

int32_t rsAtomicSub(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicSub(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानघटाई जाने वाली रकम.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

addr, यानी *addr -= value में मौजूद वैल्यू से किसी वैल्यू को एक साथ घटाता है.

rsAtomicXor : थ्रेड-सेफ़ बिटवाइज़ एक्सक्लूज़िव या

int32_t rsAtomicXor(volatile int32_t* addr, int32_t value); एपीआई लेवल 14 में जोड़ा गया
int32_t rsAtomicXor(volatile uint32_t* addr, uint32_t value); एपीआई लेवल 20 में जोड़ा गया
पैरामीटर
addrबदलाव करने के लिए वैल्यू का पता.
मानवह वैल्यू जिसे एक्सओआर करना है.
रिटर्न
ऑपरेशन से पहले *addr की वैल्यू.

यह फ़ंक्शन, दो वैल्यू के बीच बाइटवाइज़ एक्सओआर करता है. साथ ही, नतीजे को addr, यानी *addr ^= value में सेव करता है.