Compartilhar via


Classe thread

Define um objeto que é usado para observar e gerenciar um thread de execução em um aplicativo.

Sintaxe

class thread;

Comentários

É possível usar um objeto thread para observar e gerenciar um thread de execução em um aplicativo. Um objeto thread criado usando o construtor padrão não é associado a qualquer thread de execução. Um objeto thread construído usando um objeto resgatável cria um novo thread de execução e chama o objeto resgatável nesse thread. Objetos Thread podem ser movidos, mas não copiados, e é por isso que um thread de execução pode ser associado a apenas um objeto thread.

Cada thread de execução tem um identificador exclusivo do tipo thread::id. A função this_thread::get_id retorna o identificador do thread de chamada. A função membro thread::get_id retorna o identificador do thread gerenciado por um objeto thread. Para um objeto thread construído por padrão, o método thread::get_id retorna um objeto que tem um valor que é igual para todos os objetos thread construídos por padrão e diferente do valor retornado por this_thread::get_id para qualquer thread de execução que poderia ser unido no momento da chamada.

Membros

Classes públicas

Nome Descrição
id Identifica exclusivamente o thread associado.

Construtores públicos

Nome Descrição
thread Constrói um objeto thread.

Métodos públicos

Nome Descrição
detach Desanexa o thread associado do objeto thread.
get_id Retorna o identificador exclusivo do thread associado.
hardware_concurrency Estático. Retorna uma estimativa do número de contextos de thread de hardware.
join Bloqueia até que o thread associado seja concluído.
joinable Especifica se o thread associado permite junções.
native_handle Retorna o tipo específico à implementação que representa o identificador de thread.
swap Troca o estado do objeto por um objeto thread especificado.

Operadores públicos

Nome Descrição
thread::operator= Associa um thread ao objeto thread atual.

Requisitos

Cabeçalho: <thread>

Namespace: std

detach

Desanexa o thread associado. O sistema operacional fica responsável por liberar recursos de thread após o encerramento.

void detach();

Comentários

Após uma chamada para detach, as chamadas subsequentes para get_id retornamid.

Se o thread associado ao objeto de chamada não permitir junções, a função gerará um system_error que tem um código de erro invalid_argument.

Se o thread associado ao objeto de chamada for inválido, a função gerará um system_error que tem um código de erro no_such_process.

get_id

Retorna um identificador exclusivo para o thread associado.

id get_id() const noexcept;

Valor de retorno

Um objeto id que identifica exclusivamente o thread associado ou id() se nenhum thread estiver associado ao objeto.

hardware_concurrency

Método estático que retorna uma estimativa do número de contextos de thread de hardware.

static unsigned int hardware_concurrency() noexcept;

Valor de retorno

Uma estimativa do número de contextos de thread de hardware. Se o valor não puder ser calculado ou não estiver bem definido, esse método retornará 0.

Seção específica da Microsoft

hardware_concurrency é atualmente definido para retornar o número de processadores lógicos, que corresponde ao número de threads de hardware que podem ser executados simultaneamente. Ele leva em conta o número de processadores físicos, o número de núcleos em cada processador físico e o multithreading simultâneo em cada núcleo individual.

No entanto, em sistemas com mais de 64 processadores lógicos, esse número é limitado pelo número de processadores lógicos em um único grupo; consulte Grupos de Processadores.

Classe id

Fornece um identificador exclusivo para cada thread de execução no processo.

class thread::id {
    id() noexcept;
};

Comentários

O construtor padrão cria um objeto que não é comparado como igual ao objeto thread::id em qualquer thread existente.

Todos os objetos thread::id construídos por padrão são comparados como iguais.

join

Bloqueia até que o thread de execução associado ao objeto de chamada seja concluído.

void join();

Comentários

Se a chamada tiver êxito, as chamadas subsequentes a get_id do objeto de chamada retornarão um thread::id padrão que não é comparado como igual ao thread::id de qualquer thread existente; se a chamada não tiver êxito, o valor retornado por get_id ficará inalterado.

joinable

Especifica se o thread associado permite junções.

bool joinable() const noexcept;

Valor de retorno

true se o thread associado permitir junções; caso contrário, false.

Comentários

Um objeto thread pode ser ingressado se get_id() != id().

native_handle

Retorna o tipo específico à implementação que representa o identificador de thread. O identificador de thread pode ser usado de maneiras específicas à implementação.

native_handle_type native_handle();

Valor de retorno

native_handle_type é definido como HANDLE Win32, que é convertido como void *.

thread::operator=

Associa o thread de um objeto especificado ao objeto atual.

thread& operator=(thread&& Other) noexcept;

Parâmetros

Other
Um objeto thread.

Valor de retorno

*this

Comentários

As chamadas de método serão desanexadas se o objeto de chamada permitir junções.

Depois que a associação é feita, Other é definido com um estado construído por padrão.

swap

Troca o estado do objeto pelo estado de um objeto thread especificado.

void swap(thread& Other) noexcept;

Parâmetros

Other
Um objeto thread.

Construtor thread

Constrói um objeto thread.

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

Parâmetros

F
Uma função definida pelo aplicativo a ser executada pelo thread.

A
Uma lista de argumentos a ser passada para F.

Other
Um objeto thread existente.

Comentários

O primeiro construtor constrói um objeto que não está associado a nenhum thread de execução. O valor retornado por uma chamada a get_id do objeto construído é thread::id().

O segundo construtor constrói um objeto que está associado a um novo thread de execução e executa a pseudofunção INVOKE definida em <functional>. Se não houver recursos suficientes disponíveis para iniciar um novo thread, a função gerará um objeto system_error que tem um código de erro resource_unavailable_try_again. Se a chamada para F terminar com uma exceção não capturada, terminate será chamado.

O terceiro construtor constrói um objeto que está associado ao thread associado a Other. Other é então definido com um estado construído por padrão.

Confira também

Referência de Arquivos de Cabeçalho
<thread>