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