RenderScript 原子更新函式
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
總覽
如要更新多個執行緒之間共用的值,請使用以下函式。
他們會確保值全面更新,也就是讓系統以正確的順序執行記憶體讀取、更新和記憶體寫入作業。
這些函式的速度比非不可分割的對等項目慢,因此請只在需要同步時使用。
請注意,在 RenderScript 中,即使您並未明確建立程式碼,您的程式碼仍可能在不同執行緒中執行。RenderScript 執行階段通常會將一個核心的執行作業分割至多個執行緒。更新全域變數時應透過原子函式完成。可以的話,請修改演算法,避免完全採用。
摘要
函式
rsAtomicAdd
:確保執行緒安全新增功能
「Atomicly」會在加法器將值加到值中,例如 *addr += value
。
rsAtomicAnd
:執行緒安全位元和
參數
加法器 | 要修改的值的地址。 |
value | 價值與目標的價值。 |
Atomicly 會執行位元和兩個值,將結果儲存在加法點 (例如 *addr &= value
)。
rsAtomicCas
:執行緒安全比較與設定
參數
加法器 | 要在測試通過時比較及替換的值位址。 |
比較值 | 要測試 *加法的值。 |
新值 | 通過測試時要寫入的值。 |
如果 addr 中的值與 analyzeValue 相符,則系統會在 addr 上寫入新的值 (例如 if (*addr == compareValue) { *addr = newValue; }
)。
您可以檢查 rsAtomicCas() 傳回的值是否是 CompareValue,藉此檢查值是否已寫入。
rsAtomicMax
:執行緒安全上限
「Atom」將「Addr」的值設為「addr」和「value」的最大值,即 *addr = max(*addr, value)
。
rsAtomicMin
:執行緒安全下限
原型將值設為 addr 的最小值,也就是 *addr 和值,例如 *addr = min(*addr, value)
。
rsAtomicOr
:執行緒安全位元或
參數
加法器 | 要修改的值的地址。 |
value | 指定或等於的值。 |
不可分割地執行位元或兩個值,將結果儲存在 Addr 中,例如 *addr |= value
。
rsAtomicSub
:執行緒安全減法
參數
加法器 | 要修改的值的地址。 |
value | 要減去的金額。 |
以原型方式從相加的值中減去值,即 *addr -= value
。
rsAtomicXor
:僅限執行緒安全位元或
參數
加法器 | 要修改的值的地址。 |
value | xor 的值。 |
Atomicly 會執行兩個值的位元 Xor,以遞增方式儲存結果 (即 *addr ^= value
)。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2024-01-03 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2024-01-03 (世界標準時間)。"],[],[]]