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 ビットが消去または設定される変数のアドレスを指定します。
マスク 変数に適用されるビット・マスクを指定します。

説明

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 カーネル・サービスは、 処理 環境または 割り込み 環境から呼び出すことができます。

戻り値

fetch_and_and および fetch_and_or カーネル・サービスは、変数の元の値を返します。