RenderScript 原子更新函数
使用收藏集保持井井有条 根据你的偏好保存内容并进行分类。
概览
要更新多个线程之间共享的值,请使用下面的函数。这些函数可确保值进行原子更新,即内存读取、更新和内存写入按正确顺序执行。
这些函数比非原子函数慢,因此仅在需要同步时使用它们。
请注意,在 RenderScript 中,即使你没有显式创建线程,你的代码也很可能在单独的线程中运行。RenderScript 运行时通常会将一个内核的执行拆分到多个线程中。应使用原子函数更新全局变量。如果可能,请修改算法以完全避免使用这些函数。
摘要
函数
rsAtomicAdd : 线程安全加法
参数
addr | 要修改的值的地址。 |
value | 要添加的数量。 |
原子地将一个值添加到 addr 处的值,即 *addr += value
。
rsAtomicAnd : 线程安全按位与
参数
addr | 要修改的值的地址。 |
value | 要进行按位与操作的值。 |
原子地对两个值执行按位与操作,将结果存回 addr,即 *addr &= value
。
rsAtomicCas : 线程安全比较并设置
参数
addr | 要比较和替换(如果测试通过)的值的地址。 |
compareValue | 用于与 *addr 进行测试的值。 |
newValue | 如果测试通过,要写入的值。 |
如果 addr 处的值与 compareValue 匹配,则将 newValue 写入 addr,即 if (*addr == compareValue) { *addr = newValue; }
。
你可以通过检查 rsAtomicCas() 返回的值是否为 compareValue 来确认值是否已写入。
rsAtomicMax : 线程安全最大值
原子地将 addr 处的值设置为 *addr 和 value 的最大值,即 *addr = max(*addr, value)
。
rsAtomicMin : 线程安全最小值
原子地将 addr 处的值设置为 *addr 和 value 的最小值,即 *addr = min(*addr, value)
。
rsAtomicOr : 线程安全按位或
参数
addr | 要修改的值的地址。 |
value | 要进行按位或操作的值。 |
原子地对两个值执行按位或操作,将结果存回 addr,即 *addr |= value
。
rsAtomicSub : 线程安全减法
参数
addr | 要修改的值的地址。 |
value | 要减去的数量。 |
原子地从 addr 处的值中减去一个值,即 *addr -= value
。
rsAtomicXor : 线程安全按位异或
参数
addr | 要修改的值的地址。 |
value | 要进行按位异或操作的值。 |
原子地对两个值执行按位异或操作,将结果存回 addr,即 *addr ^= value
。
本页面上的内容和代码示例受 内容许可 中所述的许可约束。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。
上次更新时间:世界协调时间 (UTC) 2025 年 2 月 10 日。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂 / 步骤太多","tooComplicatedTooManySteps","thumb-down"],["已过时","outOfDate","thumb-down"],["示例 / 代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新时间:世界协调时间 (UTC) 2025 年 2 月 10 日。"],[],[]]