2011-06-21 14 views
7

tengo algunas preguntas sobre pthreads en Linux:conceptos pthread en Linux

  1. Es el caso de que se pthread_t es un tipo de datos similar a int y char que indica que estamos definiendo un hilo?
  2. En caso afirmativo, ¿cuánto espacio se necesita? 2 bytes o 4 bytes?
  3. ¿El compilador asigna memoria a pthread_t thread1 inmediatamente después de esa declaración o espera hasta que se llame a pthread_create()?
  4. ¿Cómo se establecen los atributos del hilo y cuál es su uso típico?
  5. ¿Se puede pasar solo más de un argumento en la llamada pthread_create()? ¿Si es así, cómo?

Tengo muchas cosas en mi mente como esta. Por favor, siéntase libre de sugerir buenos sitios o documentos para leer.

Respuesta

7

responder a las preguntas una por una, aunque no necesariamente en el mismo orden:

Es pthread_t un tipo de datos similar a int o char, lo que indica que estamos definiendo un hilo? Hace el compilador asigna memoria a pthread_t thread1 inmediatamente después de que la sentencia o se espere hasta que encuentra el pthread_create() llamada

pthread_t es un tipo similar a int y se crea cuando se lo define, no cuando se llama a pthread_create. En el fragmento:

pthread_t tid; 
int x = pthread_create (&tid, blah, blah, blah); 

es la línea primera que crea la variable, si bien no se mantiene nada útil hasta el regreso de pthread_create.

¿Cuánto mide pthread_t tomar, 2 bytes o 4 bytes?

No debería importar cuánto espacio ocupa, de la misma forma que no debería importar cuánto espacio ocupa una estructura FILE. Deberías usar la estructura como se pretendía. Si realmente quiere saber, entonces sizeof es su amigo.

¿Alguna buena información acerca de cómo establecer los atributos del hilo?

Si desea utilizar algo distinto de los atributos predeterminados, primero debe crear una variable de atributos y luego pasarla a la llamada pthread_create.

¿Podemos solo pasar un argumento en la función pthread_create a la función? ¿No podemos enviar 2 o 3 argumentos en la función pthread_create() al hilo llamado?

Si bien sólo se permite pasar un parámetro adicional para el hilo, no hay nada que le para de hacer este un parámetro un puntero a una estructura que sostiene un centenar de cosas diferentes.


Si está buscando información sobre cómo utilizar pthreads, hay un montón de cosas al final de una búsqueda en Google, pero yo prefiero la versión árboles muertos a mí mismo:

PThreads programming book, ISBN 13: 978-1-56592-115-3, ISBN 10: 1-56592-115-1

1

cuánto se tarda tamaño

pthread_t utiliza sizeof pthread_t bytes.

y solo podemos pasar un argumento en pthread_create a la función no más de uno? ¿No podemos enviar 2 o 3 argumentos en la función pthread_create() al hilo llamado?

Todo lo que necesita es un argumento. Todo lo que obtienes es un argumento. Es un void * por lo que puede pasar un puntero a lo que quiera. Como una estructura que contiene valores múltiples.

Tengo un montón de cosas en la cabeza como esto sugerir sitios o documentos buenas para leer

Tener un vistazo a las páginas pthread hombre, online o en su cáscara de elección (man pthread, man pthread_create , etc.) Empecé a leer algunos basic lecture slides (aquí está the sequel).

-1

Puede comenzar con este link para tener una idea acerca de pthreads.

0

Busque en el archivo pthread.h para obtener más información. En mi sistema, pthread_t se define como unsigned long int. Pero supongo que esto depende de la plataforma, ya que está definido en bits/pthreadtype.h.

+0

Esto depende de la plataforma. En algunos sistemas, es una 'struct'. –

1

pthread_t podría ser any número de bytes. Podría ser un char, un int, un puntero o una estructura ... Pero no necesita saber ni preocuparse. Si necesita el tamaño para fines de asignación, usa sizeof(pthread_t). El único tipo de variable que puede asignar es otro pthread_t.

El compilador puede asignar o no los recursos asociados con el subproceso cuando se define un pthread_t. Nuevamente, no necesita saber ni preocuparse, porque debe llamar al pthread_join (o al pthread_detach) en cualquier conversación que cree. Siempre que siga las reglas, el sistema se asegurará de que no pierda memoria (ni ningún otro recurso).

Es cierto que los atributos son un poco torpes. Se mantienen en un objeto pthread_attr_t, que de nuevo podría representarse como un entero, puntero o estructura completa. Debe inicializarlo con pthread_attr_init y destruirlo con pthread_attr_destroy. Entre esos dos, usa varias llamadas pthread_attr_... para establecer o borrar atributos, y luego puede pasarlo como parte de una o más llamadas a pthread_create para establecer los atributos de los nuevos hilos.

Diferentes implementaciones pueden y manejarán todas estas cosas de manera diferente.

LLNL has a decent set of introductory information.