RenderScript 原子更新函式

總覽

如要更新多個執行緒之間共用的值,請使用以下函式。 他們會確保值全面更新,也就是讓系統以正確的順序執行記憶體讀取、更新和記憶體寫入作業。

這些函式的速度比非不可分割的對等項目慢,因此請只在需要同步時使用。

請注意,在 RenderScript 中,即使您並未明確建立程式碼,您的程式碼仍可能在不同執行緒中執行。RenderScript 執行階段通常會將一個核心的執行作業分割至多個執行緒。更新全域變數時應透過原子函式完成。可以的話,請修改演算法,避免完全採用。

摘要

函式
rsAtomicAdd 執行緒安全新增功能
rsAtomicAnd 執行緒安全位元和
rsAtomicCas 比較及設定執行緒安全
rsAtomicDec 執行緒安全減少功能
rsAtomicInc 執行緒安全遞增
rsAtomicMax 執行緒安全上限
rsAtomicMin 執行緒安全下限
rsAtomicOr 執行緒安全位元或
rsAtomicSub 確保執行緒安全
rsAtomicXor 僅限執行緒安全位元,或

函式

rsAtomicAdd :確保執行緒安全新增功能

int32_t rsAtomicAdd(volatile int32_t* 新增器、int32_t 值); 已在 API 級別 14 中新增。
int32_t rsAtomicAdd(volatile uint32_t* 加器, uint32_t 值); 已在 API 級別 20 中新增。
參數
加法器要修改的值的地址。
value儲值金額。
傳回
作業前 *addr 的值。

「Atomicly」會在加法器將值加到值中,例如 *addr += value

rsAtomicAnd :執行緒安全位元和

int32_t rsAtomicAnd(volatile int32_t* 新增器、int32_t 值); 已在 API 級別 14 中新增。
int32_t rsAtomicAnd(volatile uint32_t* 新增器, uint32_t 值); 已在 API 級別 20 中新增。
參數
加法器要修改的值的地址。
value價值與目標的價值。
傳回
作業前 *addr 的值。

Atomicly 會執行位元和兩個值,將結果儲存在加法點 (例如 *addr &= value)。

rsAtomicCas :執行緒安全比較與設定

int32_t rsAtomicCas(volatile int32_t* 新增器、int32_tCompareValue、int32_t newValue); 已在 API 級別 14 中新增。
uint32_t rsAtomicCas(volatile uint32_t* addr、uint32_tcompareValue、uint32_t newValue); 已在 API 級別 14 中新增。
參數
加法器要在測試通過時比較及替換的值位址。
比較值要測試 *加法的值。
新值通過測試時要寫入的值。
傳回
作業前 *addr 的值。

如果 addr 中的值與 analyzeValue 相符,則系統會在 addr 上寫入新的值 (例如 if (*addr == compareValue) { *addr = newValue; })。

您可以檢查 rsAtomicCas() 傳回的值是否是 CompareValue,藉此檢查值是否已寫入。

rsAtomicDec :執行緒安全減少

int32_t rsAtomicDec(volatile int32_t* 新增工具); 已在 API 級別 14 中新增。
int32_t rsAtomicDec(volatile uint32_t* 新增器); 已在 API 級別 20 中新增。
參數
加法器要減少的值的地址。
傳回
作業前 *addr 的值。

以個別方式從加法值中減去 1。這相當於 rsAtomicSub(addr, 1)

rsAtomicInc :執行緒安全遞增

int32_t rsAtomicInc(volatile int32_t* 新增器); 已在 API 級別 14 中新增。
int32_t rsAtomicInc(volatile uint32_t* addr); 已在 API 級別 20 中新增。
參數
加法器要增加的值的地址。
傳回
作業前 *addr 的值。

在 Addr 上將 1 加至值。這相當於 rsAtomicAdd(addr, 1)

rsAtomicMax :執行緒安全上限

int32_t rsAtomicMax(volatile int32_t* 新增器、int32_t 值); 已在 API 級別 14 中新增。
uint32_t rsAtomicMax(volatile uint32_t* 加器, uint32_t 值); 已在 API 級別 14 中新增。
參數
加法器要修改的值的地址。
value比較值。
傳回
作業前 *addr 的值。

「Atom」將「Addr」的值設為「addr」和「value」的最大值,即 *addr = max(*addr, value)

rsAtomicMin :執行緒安全下限

int32_t rsAtomicMin(volatile int32_t* 加器、int32_t 值); 已在 API 級別 14 中新增。
uint32_t rsAtomicMin(volatile uint32_t* 加法器、uint32_t 值); 已在 API 級別 14 中新增。
參數
加法器要修改的值的地址。
value比較值。
傳回
作業前 *addr 的值。

原型將值設為 addr 的最小值,也就是 *addr 和值,例如 *addr = min(*addr, value)

rsAtomicOr :執行緒安全位元或

int32_t rsAtomicOr(volatile int32_t* 新增器、int32_t 值); 已在 API 級別 14 中新增。
int32_t rsAtomicOr(volatile uint32_t* 新增器、uint32_t 值); 已在 API 級別 20 中新增。
參數
加法器要修改的值的地址。
value指定或等於的值。
傳回
作業前 *addr 的值。

不可分割地執行位元或兩個值,將結果儲存在 Addr 中,例如 *addr |= value

rsAtomicSub :執行緒安全減法

int32_t rsAtomicSub(volatile int32_t* 新增器、int32_t 值); 已在 API 級別 14 中新增。
int32_t rsAtomicSub(volatile uint32_t* 新增器、uint32_t 值); 已在 API 級別 20 中新增。
參數
加法器要修改的值的地址。
value要減去的金額。
傳回
作業前 *addr 的值。

以原型方式從相加的值中減去值,即 *addr -= value

rsAtomicXor :僅限執行緒安全位元或

int32_t rsAtomicXor(volatile int32_t* 加器、int32_t 值); 已在 API 級別 14 中新增。
int32_t rsAtomicXor(volatile uint32_t* 加器, uint32_t 值); 已在 API 級別 20 中新增。
參數
加法器要修改的值的地址。
valuexor 的值。
傳回
作業前 *addr 的值。

Atomicly 會執行兩個值的位元 Xor,以遞增方式儲存結果 (即 *addr ^= value)。