Spec-Zone.ru › Kotlin 2

update

kotlin-stdlib/kotlin.concurrent.atomics/update

Требования к платформе и версии: Common (2.2)

@ExperimentalAtomicApi
expect inline fun AtomicInt.update(transform: (Int) -> Int)

Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicInt(7)
a.update { currentValue ->
    when (currentValue % 2) {
        0 -> currentValue / 2
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
expect inline fun AtomicLong.update(transform: (Long) -> Long)

Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicLong(7L)
a.update { currentValue ->
    when (currentValue % 2) {
        0L -> currentValue / 2L
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
expect inline fun <T> AtomicReference<T>.update(transform: (T) -> T)

Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   data class Wallet(val owner: String, val balance: Long)

val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
    wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100) 
   //sampleEnd
}

Требования к платформе и версии: JS (2.2)

@ExperimentalAtomicApi
actual inline fun AtomicInt.update(transform: (Int) -> Int)

Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicInt(7)
a.update { currentValue ->
    when (currentValue % 2) {
        0 -> currentValue / 2
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun AtomicLong.update(transform: (Long) -> Long)

Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicLong(7L)
a.update { currentValue ->
    when (currentValue % 2) {
        0L -> currentValue / 2L
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)

Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   data class Wallet(val owner: String, val balance: Long)

val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
    wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100) 
   //sampleEnd
}

Требования к платформе и версии: JVM (2.2)

@ExperimentalAtomicApi
actual inline fun AtomicInt.update(transform: (Int) -> Int)

Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicInt(7)
a.update { currentValue ->
    when (currentValue % 2) {
        0 -> currentValue / 2
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun AtomicLong.update(transform: (Long) -> Long)

Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicLong(7L)
a.update { currentValue ->
    when (currentValue % 2) {
        0L -> currentValue / 2L
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)

Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   data class Wallet(val owner: String, val balance: Long)

val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
    wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100) 
   //sampleEnd
}

Требования к платформе и версии: Native (2.2)

@ExperimentalAtomicApi
inline fun AtomicNativePtr.update(transform: (NativePtr) -> NativePtr)

Атомарно обновляет значение этого AtomicNativePtr значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если этот указатель был изменен параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.


@ExperimentalAtomicApi
actual inline fun AtomicInt.update(transform: (Int) -> Int)

Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicInt(7)
a.update { currentValue ->
    when (currentValue % 2) {
        0 -> currentValue / 2
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun AtomicLong.update(transform: (Long) -> Long)

Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicLong(7L)
a.update { currentValue ->
    when (currentValue % 2) {
        0L -> currentValue / 2L
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)

Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.

Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.

Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   data class Wallet(val owner: String, val balance: Long)

val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
    wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100) 
   //sampleEnd
}

Требования к платформе и версии: Wasm-JS (2.2), Wasm-WASI (2.2)

@ExperimentalAtomicApi
actual inline fun AtomicInt.update(transform: (Int) -> Int)

Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicInt(7)
a.update { currentValue ->
    when (currentValue % 2) {
        0 -> currentValue / 2
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun AtomicLong.update(transform: (Long) -> Long)

Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   val a = AtomicLong(7L)
a.update { currentValue ->
    when (currentValue % 2) {
        0L -> currentValue / 2L
        else -> 3 * currentValue + 1
    }
}
println(a.load()) // 22 
   //sampleEnd
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)

Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Примеры

import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread

fun main() { 
   //sampleStart 
   data class Wallet(val owner: String, val balance: Long)

val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
    wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100) 
   //sampleEnd
}

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.concurrent.atomics/update.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API