Recentemente, ho letto nel libro "Advanced Linux Programming" (http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf, capitolo 4.5) che sui thread GNU/Linux POSIX sono implementati come processi e che esiste una sorta di "thread manager" che funziona un po 'di controllo.Implementazione thread GNU/Linux
Quando eseguo il seguente esempio da questo libro:
#include <stdio.h>
#include <pthread.h>
void* thread_func(void *arg)
{
fprintf(stderr, "thread: %d\n", (int)getpid());
while(1);
return NULL;
}
int main()
{
fprintf(stderr, "main: %d\n", (int)getpid());
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
while(1);
return 0;
}
ho ricevuto lo stesso PID per il principale filo filo e bambino, mentre il libro dice che può essere diverso & che c'è un altro PID, che corrisponde al cosiddetto "thread manager". Ho cercato di trovare alcune informazioni su questo "thread manager", ma si sta dimostrando difficile.
UPD. Non ho dubbi sul comportamento del mio programma, ma c'è una certa confusione sul comportamento, spiegato nel libro - in particolare, in quali circostanze può essere vero?
La pagina man di clone syscall può aiutare http://linux.die.net/man/2/clone – technosaurus
* Advanced Linux Programming * è un libro molto buono, ma probabilmente precedente [ NPTL] (http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library) che è ciò che recenti [glibc] (https://www.gnu.org/software/libc/) ha/usa. –
Con i libri sulla tecnologia, sappi sempre quando è stato pubblicato il libro, in questo caso "Prima edizione, giugno 2001". La dichiarazione è semplicemente obsoleta. –