fetch_and_and 或 fetch_and_or 内核服务

用途

以原子方式清除和设置变量中的位。

语法

#include <sys/atomic_op.h>
uint fetch_and_and (addr,  mask)
atomic_p addr;uint mask;

ulong fetch_and_andlp (addr,  mask)
atomic_l addr;
ulong mask;

uint fetch_and_or (addr,  mask)
atomic_p addr;
uint mask;

ulong fetch_and_orlp (addr,  mask)
atomic_l addr;
ulong mask;

参数

描述
addr 指定要将其位清除或设置的变量的地址。
mask 指定要应用到变量的位掩码。

描述

fetch_and_andfetch_and_or 内核服务分别根据位掩码来清除和设置变量中的位,作为单个原子操作。 fetch_and_and 服务会清除变量中对应于位掩码中的清除位的位,而 fetch_and_or 服务会在变量中设置对应于位掩码中的设置位的位。

fetch_and_addfetch_and_or 内核服务在单个字 (32 位) 变量上运行,而 fetch_and_addlpfetch_and_orlp 内核服务在双字 (64 位) 变量上运行。

当包含位标志的变量在多个内核线程之间共享时,这些操作很有用,因为它们确保用于清除或设置该变量中的位的访存,更新和存储操作以原子方式发生 (不可中断)。

注意:
  • 对于 fetch_and_andfetch_and_or 内核服务,包含位标志的单个词必须在完整的字 (32 位) 边界上对齐。
  • 对于 fetch_and_addlpfetch_and_orlp 内核服务而言,包含位标志的双字必须在双字 (64 位) 边界上对齐。

执行环境

fetch_and_andfetch_and_or 内核服务可以从 流程中断 环境中调用。

返回值

fetch_and_andfetch_and_or 内核服务会返回该变量的原始值。