RenderScript のアトミック更新関数
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
概要
複数のスレッド間で共有される値を更新するには、以下の関数を使用します。
これにより、値がアトミックに更新されます。つまり、メモリの読み取り、更新、メモリ書き込みが正しい順序で実行されます。
これらの関数はアトミックでない同等の関数よりも低速であるため、同期が必要な場合にのみ使用してください。
RenderScript では、明示的に作成していなくても、コードが別のスレッドで実行される可能性があります。RenderScript ランタイムは、多くの場合、1 つのカーネルの実行を複数のスレッドに分割します。グローバルの更新はアトミック関数を使用して行う必要があります。可能であれば、完全に回避するようにアルゴリズムを変更します。
まとめ
関数
rsAtomicAdd
: スレッドセーフな追加
パラメータ
addr | 変更する値のアドレス。 |
value | 追加する金額。 |
addr の値にアトミックに値を追加します(例: *addr += value
)。
rsAtomicAnd
: スレッドセーフなビット単位および
パラメータ
addr | 変更する値のアドレス。 |
value | 価値の創出。 |
2 つの値のビット単位の計算をアトミックに実行し、結果を addr に格納します(例: *addr &= value
)。
rsAtomicCas
: スレッドセーフな比較と設定
パラメータ
addr | テストに合格した場合に比較して置き換える値のアドレス。 |
比較値 | テスト *追加値。 |
新しい値 | テストに合格した場合に書き込まれる値。 |
addr の値が compareValue と一致する場合、newValue は addr に書き込まれます(つまり if (*addr == compareValue) { *addr = newValue; }
)。
rsAtomicCas() によって返された値が compareValue であることを確認することで、値が書き込まれたことを確認できます。
rsAtomicDec
: スレッドセーフなデクリメント
addr の値からアトミックに 1 を減算します。これは rsAtomicSub(addr, 1)
と同じです。
rsAtomicInc
: スレッドセーフなインクリメント
addr の値にアトミックに 1 を加算します。これは rsAtomicAdd(addr, 1)
と同じです。
rsAtomicMax
: スレッドセーフな最大値
パラメータ
addr | 変更する値のアドレス。 |
value | 比較値。 |
addr の値をアトミックに、*addr と value の最大値(例: *addr = max(*addr, value)
)に設定します。
rsAtomicMin
: スレッドセーフな最小値
パラメータ
addr | 変更する値のアドレス。 |
value | 比較値。 |
addr の値をアトミックに、*addr と value の最小値に設定します(例: *addr = min(*addr, value)
)。
rsAtomicOr
: スレッドセーフなビット単位または
パラメータ
addr | 変更する値のアドレス。 |
value | 価値と同等額 |
ビット単位または 2 つの値をアトミックに実行し、その結果を addr に格納します(例: *addr |= value
)。
rsAtomicSub
: スレッドセーフな減算
パラメータ
addr | 変更する値のアドレス。 |
value | 減算する金額。 |
addr の値からアトミックに値を減算します(例: *addr -= value
)。
rsAtomicXor
: スレッドセーフなビット単位の排他的論理和
パラメータ
addr | 変更する値のアドレス。 |
value | xor で結合する値です。 |
2 つの値のビット単位の XOR をアトミックに実行し、その結果を addr に格納します(例: *addr ^= value
)。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2024-01-03 UTC。
[[["わかりやすい","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"]],["最終更新日 2024-01-03 UTC。"],[],[]]