Función atomic.CompareAndSwapInt64() en Golang con ejemplos

En el lenguaje Go, los paquetes atómicos proporcionan una memoria atómica de nivel inferior que es útil para implementar algoritmos de sincronización. La función CompareAndSwapInt64() en el lenguaje Go se usa para realizar la operación de comparación e intercambio para un valor int64 . Esta función se define en el paquete atómico. Aquí, debe importar el paquete «sync/atomic» para usar estas funciones.

Sintaxis:

func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool)

Aquí, addr indica la dirección, old indica el valor int64 que es el valor intercambiado anterior que se devuelve de la operación intercambiada, y new es el nuevo valor int64 que se intercambiará a sí mismo desde el valor intercambiado anterior.

Nota: (*int64) es el puntero a un valor int64. E int64 es un tipo entero de tamaño de bit 64. Además, int64 contiene el conjunto de todos los enteros de 64 bits con signo desde -9223372036854775808 hasta 9223372036854775807.

Valor devuelto: Devuelve verdadero si se logra el intercambio; de lo contrario, devuelve falso.

Los siguientes ejemplos ilustran el uso del método anterior:

Ejemplo 1:

// Golang Program to illustrate the usage of
// CompareAndSwapInt64 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable values to the int64
    var (
        i int64 = 686788787
    )
  
    // Swapping
    var old_value = atomic.SwapInt64(&i, 56677)
  
    // Printing old value and swapped value
    fmt.Println("Swapped:", i, ", old value:", old_value)
  
    // Calling CompareAndSwapInt64 
    // method with its parameters
    Swap := atomic.CompareAndSwapInt64(&i, 56677, 908998)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println("The Value of i is: ",i)
}

Producción:

Swapped: 56677 , old value: 686788787
true
The Value of i is:  908998

Ejemplo 2:

// Golang Program to illustrate the usage of
// CompareAndSwapInt64 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable values to the int64
    var (
        i int64 = 686788787
    )
  
    // Swapping
    var old_value = atomic.SwapInt64(&i, 56677)
  
    // Printing old value and swapped value
    fmt.Println("Swapped:", i, ", old value:", old_value)
  
    // Calling CompareAndSwapInt64 
    // method with its parameters
    Swap := atomic.CompareAndSwapInt64(&i, 686788787, 908998)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println(i)
}

Producción:

Swapped: 56677, old value: 686788787
false
56677

Aquí, el valor anterior en el método CompareAndSwapInt64 debe ser el valor intercambiado devuelto por el método SwapInt64 . Y aquí el intercambio no se realiza, por lo que se devuelve falso.

Publicación traducida automáticamente

Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *