Le thread créé par pthread_create est-il identique au thread du kernel?

J’utilise la commande ci-dessous pour afficher le nombre maximal de threads autorisés par mon système:

# cat /proc/sys/kernel/threads-max 

Et le nombre est 772432.

Cependant, j’utilise le code ci-dessous pour créer 1 million de threads. Et il fonctionne.

 #include  #include  static unsigned long long thread_nr = 0; pthread_mutex_t mutex_; void* inc_thread_nr(void* arg) { /* int arr[1024][1024]; */ (void*)arg; pthread_mutex_lock(&mutex_); thread_nr ++; pthread_mutex_unlock(&mutex_); } int main(int argc, char *argv[]) { int err; int cnt = 0; pthread_mutex_init(&mutex_, NULL); while (cnt < 1000000) { pthread_t pid; err = pthread_create(&pid, NULL, (void*)inc_thread_nr, NULL); if (err != 0) { break; } pthread_join(pid, NULL); cnt++; } pthread_mutex_destroy(&mutex_); printf("Maximum number of threads per process is = %d\n", thread_nr); } 

La sortie est:

 Maximum number of threads per process is = 1000000 

qui est plus grand que le nombre maximum de threads. Quelle est la raison pour ça? Et le thread créé par pthread_create -il identique au thread du kernel?

Mon système d’exploitation est Fedora 16, avec 12 cœurs, 48G de RAM.

Vous ne devriez pas imprimer longtemps votre non-signé avec% d.

Utilisation

 printf("... %llu\n", thread_nr); 

au lieu.