C ++ Thread Library - construtor de função
Descrição
É usado para construir um objeto thread.
Declaração
A seguir está a declaração para a função 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 - É um ponteiro para uma função, um ponteiro para um membro ou qualquer tipo de objeto de função construtível por movimento.
args... - Argumentos transmitidos à chamada para fn.
x - É um objeto de linha.
Valor de retorno
Nenhum
Exceções
Nenhum
Corridas de dados
modifica x.
Exemplo
No exemplo abaixo explica sobre a função 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';
}
Vamos compilar e executar o programa acima, isso produzirá o seguinte 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