Programa C++ para mostrar la interfaz de subprocesos y los errores de consistencia de la memoria

C++ permite subprocesos múltiples mediante el uso del archivo de encabezado ‘subproceso’. El programa actúa como un subproceso, pero para aumentar el tiempo de ejecución/rendimiento del programa, podemos usar subprocesos para ejecutar partes del programa al mismo tiempo. Pero puede dar lugar a problemas de errores de consistencia de la memoria y es posible que no nos brinde el resultado adecuado. Los subprocesos se utilizan para mejorar el rendimiento de las aplicaciones mediante la ejecución de procesos paralelos entre sí. 

El subproceso puede compartir el mismo recurso o puntero de referencia. Dos o más subprocesos pueden hacer referencia al mismo objeto o compartir algún recurso común e intentan actualizar o realizar cambios de forma independiente en los datos de recursos compartidos, lo que puede dejar datos inconsistentes.

Ejemplo: En el siguiente programa C++, se usan dos subprocesos para usar las mismas funciones. Primero, debe ejecutarse para el subproceso 1 y luego para el subproceso 2. Pero mostrar la consistencia de la memoria para compartir el mismo resultado de recurso/función no es consistente. 

C++14

// C++ program to show
// memory consistency
#include <bits/stdc++.h>
#include <thread>
using namespace std;
  
class thread_obj {
public:
   
 void operator()(int x)
 {
    for (int i = 0; i < 50; i++)
    {
      cout << "Thread " << x << "\n";
    }
 }
};
  
// Driver code
int main()
{
   // thread 1
   thread th1(thread_obj(), 1);
  
   // thread 2
   thread th2(thread_obj(), 2);
  
   // wait for thread1 to join
   th1.join();
  
   // wait for thread2 to join
   th2.join();
    
   return 0;
}
C++ program with inconsistent output

Salida: puede ver inconsistencias en la salida (depende de la máquina)

Ejemplo 2: en el siguiente programa C++, se intentará acceder al mismo valor desde diferentes subprocesos, ya que se pueden ver errores de consistencia de la memoria, ya que ambos subprocesos se ejecutarán simultáneamente.

C++

// C++ program to show memory
// consistency error
#include <iostream>
#include <thread>
using namespace std;
  
int x = 100;
  
void thread_function() 
{
    for(int i = 0; i < 50; i++) 
    { 
      x--;
      cout << "Thread 1 " << 
               x << "\n";
    }
}
  
// Driver code
int main() 
{
  std::thread t(&thread_function);
    
  for(int i = 0;i < 100; i++) 
  {
      x++;
      cout << "main thread " << 
             x << "\n";
  }
       return 0;
}
C++ program with inconsistent output

Salida: puede ver inconsistencias en la salida (depende de la máquina)

Publicación traducida automáticamente

Artículo escrito por sugam0519 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 *