RenderScript 原子更新函数
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
概览
如需更新多个线程之间共享的值,请使用以下函数。它们可确保值以原子方式更新,即以正确的顺序执行内存读取、更新和内存写入。
这些函数比其非原子函数慢,因此请仅在需要同步时使用。
请注意,在 RenderScript 中,即使您没有明确创建代码,代码也可能会在单独的线程中运行。RenderScript 运行时通常会将一个内核的执行拆分到多个线程中。更新全局变量应使用原子函数完成。如果可能,请修改算法,完全避免采用这些错误。
总结
函数
rsAtomicAdd
:线程安全加法
以原子方式向 addr 处的值添加一个值,即 *addr += value
。
rsAtomicAnd
:线程安全按位和
参数
addr | 要修改的值的地址。 |
value | 值与 的值。 |
以原子方式执行一个按位值和两个值,并将结果存储回 addr 处,即 *addr &= value
。
rsAtomicCas
:线程安全的比较和设置
参数
addr | 在测试通过时要比较和替换的值的地址。 |
比较值 | 要测试 *addr 的值。 |
新值 | 测试通过时要写入的值。 |
如果 addr 处的值与 compareValue 匹配,则将 newValue 写入 addr,即 if (*addr == compareValue) { *addr = newValue; }
。
您可以通过检查 rsAtomicCas() 返回的值是否为 compareValue 来检查值是否已写入。
rsAtomicMax
:线程安全最大值
原子方式将 addr 处的值设置为 *addr 和值的最大值,即 *addr = max(*addr, value)
。
rsAtomicMin
:线程安全最小值
原子方式将 addr 处的值设置为 *addr 和值的最小值,即 *addr = min(*addr, value)
。
rsAtomicOr
:线程安全按位或
以原子方式执行一个按位值或两个值,并将结果存储在 addr 处,即 *addr |= value
。
rsAtomicSub
:线程安全减法
参数
addr | 要修改的值的地址。 |
value | 要扣除的金额。 |
自动从 addr 处的值减去一个值,即 *addr -= value
。
rsAtomicXor
:线程安全按位排除或
参数
addr | 要修改的值的地址。 |
value | 要执行异或运算的值。 |
以原子方式对两个值执行按位异或运算,并将结果存储在 addr 处,即 *addr ^= value
。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):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"]],["最后更新时间 (UTC):2024-01-03。"],[],[]]