Función atomic.AddInt32() 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 AddInt32() en Golang se usa para agregar atómicamente delta a *addr . Esta función se define en el paquete atómico. Aquí, debe importar el paquete «sync/atomic» para usar estas funciones.

Sintaxis: 

func AddInt32(addr *int32, delta int32) (new int32)

Aquí, addr indica dirección y delta indica una pequeña cantidad de bits mayor que cero.

Nota: (*int32) es el puntero a un valor int32. Además, int32 contiene el conjunto de todos los enteros de 32 bits con signo desde -2147483648 hasta 2147483647.
Valor devuelto: suma addr y delta y devuelve un nuevo valor.

Ejemplo 1:

Go

// Golang Program to illustrate the usage of
// AddInt32 function
 
// Including main package
package main
 
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
// Main function
func main() {
 
    // Assigning values to the int32
    var (
        i int32 = 97
        j int32 = 48
        k int32 = 34754567
        l int32 = -355363
    )
 
    // Assigning constant
    // values to int32
    const (
        x int32 = 4
        y int32 = 2
    )
 
    // Calling AddInt32 method
    // with its parameters
    res_1 := atomic.AddInt32(&i, y)
    res_2 := atomic.AddInt32(&j, y-1)
    res_3 := atomic.AddInt32(&k, x-1)
    res_4 := atomic.AddInt32(&l, x)
 
    // Displays the output after adding
    // addr and delta atomically
    fmt.Println(res_1)
    fmt.Println(res_2)
    fmt.Println(res_3)
    fmt.Println(res_4)
}

Producción: 

99
49
34754570
-355359

Ejemplo 2:

Go

// Golang Program to illustrate the usage of
// AddInt32 function
 
// Including main package
package main
 
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
// Defining addr of type int32
type addr int32
 
// function that adds addr and delta
func (x *addr) add() int32 {
 
    // Calling AddInt32() function
    // with its parameter
    return atomic.AddInt32((*int32)(x), 2)
}
 
// Main function
func main() {
 
    // Defining x
    var x addr
 
    // For loop to increment
    // the value of x
    for i := 1; i < 7; i++ {
 
        // Displays the new value
        // after adding delta and addr
        fmt.Println(x.add())
    }
}

Producción: 

2
4
6
8
10
12

En el ejemplo anterior, hemos definido una función add que devuelve el resultado de llamar al método AddInt32 . En la función principal, hemos definido un bucle «for» que incrementará el valor de ‘x’ en cada llamada. Aquí, el segundo parámetro del método AddInt32() es constante y solo el valor del primer parámetro es variable. Sin embargo, la salida de la llamada anterior será el valor del primer parámetro del método AddInt32() en la siguiente llamada hasta que se detenga el bucle.

Veamos cómo funciona el ejemplo anterior: 

1st parameter = 0, 2nd parameter = 2   // returns ( 0 + 2 = 2)

// Now, the above output is 1st parameter in next call to AddInt32() method
1st parameter = 2, 2nd parameter = 2   // returns ( 2 + 2 = 4)
1st parameter = 4, 2nd parameter = 2   // returns ( 4 + 2 = 6) and so on.

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 *