compare_and_swap カーネル・サービスS
目的
変数を条件付きで更新するか、またはアトミックに返します。
構文
#include <sys/atomic_op.h>
boolean_t compare_and_swap (addr, old_val_addr, new_val)
atomic_p addr;
int *old_val_addr;
int new_val;
#include <sys/atomic_op.h>
boolean_t compare_and_swaplp (addr, old_val_addr, new_val)
atomic_l addr;
long *old_val_addr;
long new_val;
パラメーター
| 項目 | 説明 |
|---|---|
| addr | 変数のアドレスを指定します。 |
| old_val_addr | 変数の値に対して検査 (および条件付きで更新) される古い値のアドレスを指定します。 |
| new_val | 変数に条件付きで割り当てる新しい値を指定します。 |
説明
比較およびスワップ (compare_and_swap) カーネル・サービスS は、保管されている古い値と変数の内容を比較するアトミック (割り込み不能) 操作を実行します。等しい場合は、新しい値が変数に保管され、 はい が戻されます。そうでない場合は、古い値が変数の現行値に設定され、 FALSE が戻されます。
比較およびスワップ (compare_and_swap) カーネル・サービスは単一ワード (32 ビット) の変数で動作しますが、 比較とスワップの比較 カーネル・サービスはダブルワード (64 ビット) の変数で動作します。
比較およびスワップ (compare_and_swap) カーネル・サービスは、特に単一リンク・リストに対する操作で役立ちます。この操作では、リスト・ポインターが読み取られてから別のスレッドによって変更されている場合は、リスト・ポインターを更新してはなりません。
注:
- 比較およびスワップ (compare_and_swap) カーネル・サービスに渡される単一ワード変数は、フルワード (32 ビット) 境界に位置合わせする必要があります。
- 比較とスワップの比較 カーネル・サービスに渡されるダブルワード変数は、ダブルワード (64 ビット) 境界に位置合わせする必要があります。
実行環境
比較およびスワップ (compare_and_swap) カーネル・サービスS は、 処理 環境または 割り込み 環境から呼び出すことができます。
戻り値
| 項目 | 説明 |
|---|---|
| TRUE | 変数が古い値と同じであり、新しい値に設定されていることを示します。 |
| FALSE | 変数が古い値と等しくなかったこと、およびその現行値が古い値が保管された場所に戻されたことを示します。 |