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 puder ingressar, a função gerará um system_error
código de erro .invalid_argument
Se o thread associado ao objeto de chamada for inválido, a função lançará um system_error
código de erro .no_such_process
get_id
Retorna um identificador exclusivo para o thread associado.
id get_id() const noexcept;
Valor retornado
Um id
objeto 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 retornado
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.
específica da Microsoft
hardware_concurrency
Retorna 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.
Antes do Windows 11 e do Windows Server 2022, os aplicativos eram limitados por padrão a um único grupo de processadores, tendo no máximo 64 processadores lógicos. Isso limitou o número de threads em execução simultânea a 64. Para obter mais informações, consulte Grupos de processadores.
A partir do Windows 11 e do Windows Server 2022, os processos e seus threads têm afinidades de processador que, por padrão, abrangem todos os processadores no sistema e em vários grupos em computadores com mais de 64 processadores. O limite do número de threads simultâneos agora é o número total de processadores lógicos no sistema.
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 retornado
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 retornado
native_handle_type
é definido como uma conversão Win32 HANDLE
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 retornado
*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 no 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 get_id
para o objeto construído é thread::id()
.
O segundo construtor constrói um objeto associado a um novo thread de execução. Ele executa a pseudo-funçã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. A chamada para F
não deve fazer com que o thread saia prematuramente, como chamando ExitThread
ou _endthreadex
.
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.