I use the command below to view the maximum number of threads allowed by my system:
And the number 772432.
However, I use the following code to create 1 million threads. And it works.
#include <pthread.h> #include <stdio.h> 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); }
Output:
Maximum number of threads per process is = 1000000
which is greater than the maximum number of threads. What is the reason for this? And is there a thread created by pthread_create the same with the kernel thread?
My OS is Fedora 16, with 12 cores, 48G RAM.
injoy
source share