Función atomic.CompareAndSwapUint64() 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 CompareAndSwapUint64() en el lenguaje Go se usa para realizar la operación de comparación e intercambio para un valor uint64 . Esta función se define en el paquete atómico. Aquí, debe importar el paquete «sync/atomic» para usar estas funciones.

Sintaxis:

func CompareAndSwapUint64(addr *uint64, old, new uint64) (swapped bool)

Aquí, addr indica la dirección, old indica el valor de uint64 que es el anterior y new es el nuevo valor de uint64 que se cambiará a sí mismo del valor anterior.

Nota: (*uint64) es el puntero a un valor uint64. Y uint64 es un tipo entero de tamaño de bit 64. Además, int64 contiene el conjunto de todos los enteros de 64 bits sin signo que van desde 0 a 18446744073709551615.

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

Ejemplo 1:

// Golang Program to illustrate the usage of
// CompareAndSwapUint64 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable values to the uint64
    var (
        i uint64 = 34764576575
    )
  
    // Calling CompareAndSwapUint64 method with its parameters
    Swap := atomic.CompareAndSwapUint64(&i, 34764576575, 575765878)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println("The new value of i is: ",i)
}

Producción:

true
The new value of i is:  575765878

Ejemplo 2:

// Golang Program to illustrate the usage of
// CompareAndSwapUint64 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable 
    // values to the uint64
    var (
        i uint64 = 143255757
    )
  
    // Swapping operation. Here value of i become
    // 4676778904
    var oldvalue = atomic.SwapUint64(&i, 4676778904)
  
    // Printing old value and swapped value
    fmt.Println("Swapped_value:", i, ", old_value:", oldvalue)
  
    // Calling CompareAndSwapUint64 
    // method with its parameters
    Swap := atomic.CompareAndSwapUint64(&i, 143255757, 9867757)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println("The value of i is: ",i)
}

Producción:

Swapped_value: 4676778904 , old_value: 143255757
false
The value of i is:  4676778904

Aquí, el valor intercambiado obtenido de la operación de intercambio debe ser el valor anterior. es decir, 4676778904, por eso 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 *