Threads em C++ – Parte 1

por Fabio A. Mazzarino

Thread é um assunto importante em qualquer linguagem moderna. Atualmente é muito comum encontrar desktops com múltiplos núcleos, isso sem contar os servidores que há décadas contam com múltiplos processadores. Por conta disso sistemas capazes de tirar proveito dos múltiplos núcleos e/ou processadores são muito relevantes.

Threads em C++ começam a ser suportadas no C++ 11, antes disso era necessário utilizar as funções de pthread do C. Para começar a classe std::thread, que representa a execução da thread. Vamos a um exemplo, como sempre:


#include <iostream>
#include <thread>

int everytsecs(unsigned t, unsigned n) {
    for (int ct = 1; ct <= n; ct++ ) {
        std::this_thread::sleep_for(std::chrono::seconds(t));
        std::cout << "Every " << t << " seconds. Total Time: " << ct * t << " seconds" << std::endl;
    }
    return 1;
}
int main() {
    std::cout << "Setting two threads 50 x 3 seconds and 30 x 5 seconds" << std::endl;
    std::thread every3secs(everytsecs, 3, 5);
    std::thread every5secs(everytsecs, 5, 3);

    every3secs.join();
    every5secs.join();
    std::cout << "Both threads finished" << std::endl;
}

No código acima são criadas duas threads, cada uma com dois parâmetros. Usamos um loop e a função sleep_for para que cada thread imprima o total de tempo decorrido.

No programa principal criamos as duas threads chamando a mesma função com parâmetros diferentes. E em seguidas utilizamos o método join pra aguardar o fim de cada uma das threads.

Simples assim. O básico de threads é bem simples mesmo, mas complica quando é preciso compartilhar recursos. E vamos aprender mais sobre gestão dos recursos nos próximos posts.