نظرة عامة
لتعديل القيم المشتركة بين سلاسل محادثات متعدّدة، استخدِم الدوال أدناه. فهي تضمن تحديث القيم بشكل كامل، بمعنى أن الذاكرة تتم قراءتها والتحديثات وكتابة الذاكرة بالترتيب الصحيح.
هذه الدوال أبطأ من مكافئاتها غير الذرية، لذا لا تستخدمها إلا عند الحاجة إلى المزامنة.
في 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
.