2009-08-19 7 views
8

Una pregunta acerca de las discusiones en C/C++ ...Temas en C, C++, C++ 0x, pthread y aumentar

C++ 0x sintaxis

#include <thread> 

void dummy() {} 

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

¿Cuántas son las discusiones ¿ahí? Dos (x e y) o tres (x, y y principal)? ¿Puedo llamar al this_thread::yield() en main? ¿Y qué obtengo de llamar al this_thread::get_id() en main?

sintaxis pthread

#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; 
} 

El número de threads hay? Dos (x e y) o tres (x, y y principal)? ¿Puedo llamar al pthread_yield() en main? ¿Y qué obtengo al llamar al pthread_self() en main?

sintaxis impulso

#include <boost/thread> 

void dummy() {} 

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

El número de threads hay? Dos (x e y) o tres (x, y y principal)? ¿Puedo llamar al boost::this_thread::yield() en main? ¿Y qué obtengo al llamar al boost::this_thread::get_id() en main?

+2

En el ejemplo secound que haya escrito pthread_t x, t; luego usas x, y; Typo, supongo. –

Respuesta

25

En cada caso que haya creado dos hilos adicionales para que tenga tres (x, y, y principal). Obtendrá una identificación diferente en cada uno de los hilos, incluida una llamada en main.

+1

Es raro cuando una gran pregunta es tan concisamente respondida. –

+8

No realmente: es tres veces la misma pregunta que la versión de refuerzo es una implementación del futuro estándar uno (c + + 0x) que se basa en la posix ... – Klaim

0

El hilo principal es siempre allí y crear nuevos temas adicionales. Si el hilo principal muere, el programa muere o el comportamiento no está definido. También es posible comenzar con una gran cantidad de subprocesos, ya que el tiempo de ejecución puede comenzar (y, a menudo, como los subprocesos linux_threads "pthreads" de implementación).

rendimiento de llamada siempre es posible, ya que sólo dice al sistema operativo que puede dar el resto de la porción de tiempo a otro hilo si hay alguien con igual o mayor prioridad. Si no escribe funciones de sincronización de bajo nivel, como las espinilleras, no hay una razón real para llamar el rendimiento en su aplicación.

0

Todas las tres implementaciones anteriores dan los mismos resultados. Como std :: thread se implementa sobre 'pthread', todos crearán tres hilos. Principal será el hilo de los padres y los demás se convertirá en procesos hijo y tienen diferentes identificadores cuando se crea cada hilo y el impulso :: hilo es creado por el mismo autor como de std :: hilo, pero añadiendo algunas mejoras.