دوال التحديث البسيط لـ RenderScript

نظرة عامة

لتعديل القيم المشتركة بين سلاسل محادثات متعدّدة، استخدِم الدوال أدناه. فهي تضمن تحديث القيم بشكل كامل، بمعنى أن الذاكرة تتم قراءتها والتحديثات وكتابة الذاكرة بالترتيب الصحيح.

هذه الدوال أبطأ من مكافئاتها غير الذرية، لذا لا تستخدمها إلا عند الحاجة إلى المزامنة.

في RenderScript، من المحتمل أن تعمل التعليمات البرمجية في سلاسل ترابط منفصلة على الرغم من أنك لم تنشئها بشكل صريح. غالبًا ما يقسم وقت تشغيل RenderScript تنفيذ نواة واحدة عبر خيوط متعددة. يجب أن يتم تعديل العموم العالمية باستخدام الدوال البسيطة. إن أمكن، تعديل الخوارزمية لديك لتجنبها تمامًا.

ملخّص

الدوال
rsAtomicAdd إضافة بدون سلسلة محادثات
rsAtomicAnd أم لا من حيث الخيط
rsAtomicCas مقارنة وضبط من خلال سلاسل محادثات آمنة
rsAtomicDec تقليل آمن من خلال سلسلة محادثات
rsAtomicInc جزء آمن من سلسلة المحادثات
rsAtomicMax الحد الأقصى لسلسلة المحادثات الآمنة
rsAtomicMin الحد الأدنى لسلسلة المحادثات الآمنة
rsAtomicOr أمان سلسلة التعليمات على مستوى البت أو
rsAtomicSub عملية الطرح الآمنة لسلسلة المحادثات
rsAtomicXor أمان على سلسلة محادثات بشكل حصري أو

الدوال

rsAtomicAdd : إضافة آمنة من خلال سلاسل المحادثات

int32_t rsAtomicAdd(volatile int32_t* addr, int32_t); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicAdd(volatile uint32_t* addr, uint32_t); تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueالمبلغ المطلوب إضافته
الركلات المردودة
قيمة *addr قبل العملية.

يضيف تلقائيًا قيمة إلى القيمة عند الإضافة، أي *addr += value.

rsAtomicAnd : بروتوكول بت آمن على سلاسل المحادثات

int32_t rsAtomicAnd(volatile int32_t* addr, int32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicAnd(volatile uint32_t* addr, uint32_t تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueالقيمة بين ومع.
الركلات المردودة
قيمة *addr قبل العملية.

يتم تنفيذ البيانات بشكل Atom على مستوى بت لقيمتين، مع تخزين النتيجة مرة أخرى في addr، أي *addr &= value.

rsAtomicCas : مقارنة وإعداد آمن من خلال سلاسل المحادثات

int32_t rsAtomicCas(volatile int32_t* addr, int32_t browseValue, int32_t newValue); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
uint32_t rsAtomicCas(volatile uint32_t* addr, uint32_t includeValue, uint32_t newValue); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب مقارنتها واستبدالها في حال اجتياز الاختبار.
قيمة المقارنةالقيمة التي يجب اختبارها *وفقًا لها.
قيمة جديدةالقيمة التي يجب كتابتها إذا اجتاز الاختبار.
الركلات المردودة
قيمة *addr قبل العملية.

إذا كانت القيمة في addr تطابق purchaseValue، تتم كتابة newValue بـ addr، أي if (*addr == compareValue) { *addr = newValue; }.

يمكنك التحقق من أن القيمة تمت كتابتها عن طريق التحقق من أن القيمة التي تم إرجاعها بواسطة rsAtomicCas() هي browseValue.

rsAtomicDec : تقليل آمن من خلال سلاسل المحادثات

int32_t rsAtomicDec(volatile int32_t* addr)، تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicDec(volatile uint32_t* addr)، تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المراد إنقاصها.
الركلات المردودة
قيمة *addr قبل العملية.

يتم طرح واحد بشكل ذري من القيمة عند الجمع. يعادل ذلك rsAtomicSub(addr, 1).

rsAtomicInc : زيادة آمنة لسلاسل المحادثات

int32_t rsAtomicInc(volatile int32_t* addr); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicInc(volatile uint32_t* addr)، تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب إضافتها.
الركلات المردودة
قيمة *addr قبل العملية.

يضيف Atom واحدًا إلى القيمة عند الإضافة. يعادل ذلك rsAtomicAdd(addr, 1).

rsAtomicMax : الحد الأقصى الآمن من خلال سلاسل المحادثات

int32_t rsAtomicMax(volatile int32_t* addr, int32_t); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
uint32_t rsAtomicMax(volatile uint32_t* addr, uint32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueقيمة المقارنة.
الركلات المردودة
قيمة *addr قبل العملية.

يضبط القيمة بشكل موجز في addr على الحد الأقصى *addr والقيمة، أي *addr = max(*addr, value).

rsAtomicMin : حد أدنى آمن لسلاسل المحادثات

int32_t rsAtomicMin(volatile int32_t* addr, int32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
uint32_t rsAtomicMin(volatile uint32_t* addr, uint32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueقيمة المقارنة.
الركلات المردودة
قيمة *addr قبل العملية.

يضبط القيمة بشكل موجز في addr على الحد الأدنى *addr والقيمة، أي *addr = min(*addr, value).

rsAtomicOr : Thread-safe bitwise أو

int32_t rsAtomicOr(volatile int32_t* addr, int32_t); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicOr(volatile uint32_t* addr, uint32_t); تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueالقيمة إلى أو مع.
الركلات المردودة
قيمة *addr قبل العملية.

نفِّذ عدة قيم أو قيمتين على نطاق بت، مع تخزين النتيجة في addr، أي *addr |= value.

rsAtomicSub : الطرح الآمن من خلال سلسلة المحادثات

int32_t rsAtomicSub(volatile int32_t* addr, int32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicSub(volatile uint32_t* addr, uint32_t تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueالمبلغ المطلوب طرحه
الركلات المردودة
قيمة *addr قبل العملية.

تطرح قيمة بشكل ذري من القيمة عند الإضافة، أي *addr -= value.

rsAtomicXor : حصري على مستوى بت آمن على سلاسل المحادثات أو

int32_t rsAtomicXor(volatile int32_t* addr, int32_t تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
int32_t rsAtomicXor(volatile uint32_t* addr, uint32_t تمّت الإضافة في المستوى 20 من واجهة برمجة التطبيقات
المعلّمات
Adrعنوان القيمة المطلوب تعديلها.
valueقيمة إلى xor.
الركلات المردودة
قيمة *addr قبل العملية.

يعمل بشكل Atom على تنفيذ xor لقيمتين على مستوى البت، مع تخزين النتيجة في addr، أي *addr ^= value.