Biblioteca de subprocesos de C ++: constructor de funciones

Descripción

Se utiliza para construir un objeto hilo.

Declaración

A continuación se muestra la declaración de la función std :: thread :: thread.

thread() noexcept;
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
thread (const thread&) = delete;	
thread (thread&& x) noexcept;

C ++ 11

thread() noexcept;
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
thread (const thread&) = delete;	
thread (thread&& x) noexcept;

Parámetros

  • fn - Es un puntero a una función, un puntero a un miembro o cualquier tipo de objeto de función construible de movimiento.

  • args... - Argumentos pasados ​​al llamado a fn.

  • x - Es un objeto de hilo.

Valor devuelto

ninguna

Excepciones

ninguna

Carreras de datos

modifica x.

Ejemplo

En el siguiente ejemplo se explica la función std :: thread :: thread.

#include <iostream>
#include <utility>
#include <thread>
#include <chrono>
#include <functional>
#include <atomic>
 
void f1(int n) {
   for (int i = 0; i < 5; ++i) {
      std::cout << "1st Thread executing\n";
      ++n;
      std::this_thread::sleep_for(std::chrono::milliseconds(10));
   }
}

void f2(int& n) {
   for (int i = 0; i < 5; ++i) {
      std::cout << "2nd Thread executing\n";
      ++n;
      std::this_thread::sleep_for(std::chrono::milliseconds(10));
   }
}
 
int main() {
   int n = 0;
   std::thread t1;
   std::thread t2(f1, n + 1);
   std::thread t3(f2, std::ref(n));
   std::thread t4(std::move(t3));
   t2.join();
   t4.join();
   std::cout << "Final value of n is " << n << '\n';
}

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
2nd Thread executing
1st Thread executing
Final value of n is 5