2011-06-21 3 views
7

Ho alcune domande su pthreads in Linux:concetti pthread in linux

  1. è forse il caso che pthread_t Si tratta di un tipo di dati simile a int e char indicando stiamo definendo un filo?
  2. Se sì, quanto dimensione ci vuole? 2 byte o 4 byte?
  3. Il compilatore alloca memoria a pthread_t thread1 immediatamente dopo tale istruzione o attende fino a quando non si chiama pthread_create()?
  4. Come si impostano gli attributi del thread e qual è il loro tipico utilizzo?
  5. Si può passare più di un argomento solo nella chiamata pthread_create()? Se é cosi, come?

Ho molte cose per la testa in questo modo. Si prega inoltre di suggerire eventuali buoni siti o documenti da leggere.

risposta

7

rispondere alle domande una per una, anche se non necessariamente nello stesso ordine:

È pthread_t un tipo di dati simile a int o char, indicando stiamo definendo un filo? Fa il compilatore di allocare memoria al pthread_t thread1 subito dopo quella frase o lo fa attendere fino a trovare la pthread_create() chiamata

pthread_t è un tipo simile a int ed è creato quando si definisce, non quando si chiama pthread_create. Nel frammento:

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

è la linea di prima che crea la variabile, anche se non vale niente di utile fino al ritorno da pthread_create.

Quante dimensioni ha un valore di pthread_t, 2 byte o 4 byte?

Non si deve preoccupare di quanto spazio ci vuole, non più di quanto si dovrebbe preoccupare di quanto spazio è occupato da una struttura FILE. Dovresti semplicemente usare la struttura come previsto. Se vuoi dire , allora sizeof è tuo amico.

Qualche buona informazione su come impostare gli attributi del thread?

Se si desidera utilizzare un valore diverso dagli attributi di default, è necessario prima creare una variabile di attributi e quindi passare alla chiamata pthread_create.

È possibile passare solo un argomento nella funzione pthread_create alla funzione? Non possiamo inviare 2 o 3 argomenti nella funzione pthread_create() al thread chiamato?

Mentre si è permesso solo di passare uno parametro in più per il filo, non c'è nulla ti impedisce di fare questo un parametro un puntatore ad una struttura in possesso di un centinaio di cose diverse.


Se siete alla ricerca di informazioni su come utilizzare pthreads, c'è un sacco di roba al termine di una ricerca su Google, ma io continuo a preferire la versione morti-albero di me stesso:

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

1

la quantità di spazio ci vuole

pthread_t utilizza sizeof pthread_t byte.

e possiamo passare solo un argomento in pthread_create alla funzione non più di uno? non possiamo inviare 2 o 3 argomenti nella funzione pthread_create() al thread chiamato?

Tutto ciò che serve è un argomento. Tutto quello che ottieni è un argomento. È un void * così puoi passare un puntatore a come vuoi. Come una struttura che contiene più valori.

ho un sacco di cose per la testa in questo modo suggerire eventuali buoni siti o documenti da leggere

Dai un'occhiata alla pagine pthread man, online o nella shell di scelta (man pthread, man pthread_create , eccetera.). Ho iniziato a leggere alcuni basic lecture slides (qui è the sequel).

-1

È possibile iniziare con questo link per avere un'idea di pthreads.

0

Cerca nel file pthread.h per ottenere maggiori informazioni. Sul mio sistema, pthread_t è definito come unsigned long int. Ma immagino che questo dipenda dalla piattaforma, dal momento che è definito in bits/pthreadtype.h.

+0

Questo dipende molto dalla piattaforma. Su alcuni sistemi è una 'struct'. –

1

pthread_t potrebbe essere qualsiasi numero di byte. Potrebbe essere un char, un int, un puntatore o una struttura ... Ma non devi né saperlo né preoccupartene. Se è necessaria la dimensione per l'assegnazione, si utilizza sizeof(pthread_t). L'unico tipo di variabile a cui è possibile assegnarlo è un altro pthread_t.

Il compilatore può o non può allocare le risorse associate al thread quando si definisce un pthread_t. Ancora una volta, non è necessario conoscere né preoccuparsi, perché è necessario chiamare pthread_join (o pthread_detach) su qualsiasi thread creato. Finché si seguono le regole, il sistema si assicurerà che non rimanga memoria (o qualsiasi altra risorsa).

Gli attributi sono dichiaratamente un po 'goffi. Sono contenuti in un oggetto pthread_attr_t, che potrebbe essere rappresentato come un intero, un puntatore o un'intera struttura. Devi inizializzarlo con pthread_attr_init e distruggerlo con pthread_attr_destroy. Tra questi due, si utilizzano varie chiamate pthread_attr_... per impostare o deselezionare attributi e quindi è possibile passarlo come parte di una o più chiamate pthread_create per impostare gli attributi dei nuovi thread.

Diverse implementazioni possono gestire e gestire tutte queste cose in modo diverso.

LLNL has a decent set of introductory information.