fetch_and_and 或 fetch_and_or 内核服务
用途
以原子方式清除和设置变量中的位。
语法
参数
| 项 | 描述 |
|---|---|
| addr | 指定要将其位清除或设置的变量的地址。 |
| mask | 指定要应用到变量的位掩码。 |
描述
fetch_and_and 和 fetch_and_or 内核服务分别根据位掩码来清除和设置变量中的位,作为单个原子操作。 fetch_and_and 服务会清除变量中对应于位掩码中的清除位的位,而 fetch_and_or 服务会在变量中设置对应于位掩码中的设置位的位。
fetch_and_add 和 fetch_and_or 内核服务在单个字 (32 位) 变量上运行,而 fetch_and_addlp 和 fetch_and_orlp 内核服务在双字 (64 位) 变量上运行。
当包含位标志的变量在多个内核线程之间共享时,这些操作很有用,因为它们确保用于清除或设置该变量中的位的访存,更新和存储操作以原子方式发生 (不可中断)。
注意:
- 对于 fetch_and_and 和 fetch_and_or 内核服务,包含位标志的单个词必须在完整的字 (32 位) 边界上对齐。
- 对于 fetch_and_addlp 和 fetch_and_orlp 内核服务而言,包含位标志的双字必须在双字 (64 位) 边界上对齐。
执行环境
返回值
fetch_and_and 和 fetch_and_or 内核服务会返回该变量的原始值。