Pergunta

Uma pergunta sobre tópicos em C / C ++ ...

C ++ 0x sintaxe

#include <thread>

void dummy() {}

int main(int, char*[]) {
   std::thread x(dummy);
   std::thread y(dummy);
   ...
   return 0;
}

Como muitos tópicos estão lá? Dois (x e y) ou três (x, y e principais)? Eu posso chamar this_thread::yield() na principal? E o que eu ganho de chamar this_thread::get_id() na principal?

pthread sintaxe

#include <pthread.h>

void dummy() {}

int main(int, char*[]) {
   pthread_t x, y;
   pthread_create(&x, NULL, &dummy, NULL);
   pthread_create(&y, NULL, &dummy, NULL);
   ...
   return 0;
}

Como muitos tópicos estão lá? Dois (x e y) ou três (x, y e principais)? Eu posso chamar pthread_yield() na principal? E o que eu ganho de chamar pthread_self() na principal?

boost sintaxe

#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}

Como muitos tópicos estão lá? Dois (x e y) ou três (x, y e principais)? Eu posso chamar boost::this_thread::yield() na principal? E o que eu ganho de chamar boost::this_thread::get_id() na principal?

Foi útil?

Solução

Em cada caso, você criou duas threads adicionais para que você tenha três (x, y, e principal). Você vai ter um ID diferente em cada um dos tópicos, incluindo uma chamada no principal.

Outras dicas

O thread principal está sempre lá e você criar novos tópicos adicionais. Se o segmento principal morre programar morre ou comportamento é não definido. Também é possível começar com um monte de tópicos como o tempo de execução pode começar (e, muitas vezes, - como os linux_threads "pthreads" implemenation). Tópicos na própria existência

Chamando rendimento é sempre possível uma vez que apenas diz ao sistema operacional que ele pode dar o resto da fatia de tempo para outro segmento, se houver qualquer um com igual ou maior prioridade. Se você não escrever baixo nível de sincronização apresenta como spinlocks não há nenhuma razão real para o rendimento chamada de sempre na sua aplicação.

Todos os acima de três implementações dar os mesmos resultados. Como o std :: thread é implementado em cima do 'pthread' então tudo irá criar três tópicos. Principal será o seu segmento pai e os outros vai se tornar tópicos criança e têm diferentes IDs quando cada thread é criado e o boost :: thread é criado pelo mesmo autor como de std :: discussão, mas adicionando algumas melhorias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top