这里有一个简单的示例来说明,占用所有空间的并不是p线程的创建.您的线程必须有自己的内存分配与之关联.在这种情况下,如果可能的话,您可能需要重新设计您的程序以更有效地使用内存.
使用这个程序,我可以轻松地创建10,000多个线程,而内存使用量甚至不会增加1 GB.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
// gcc threadmemtest.c -o threadmemtest.bin -O3 -Wall -pthread -march=native
void* sleepforabit(void*arg) {
sleep(25);
return NULL;
}
int main(int argc, char **argv){
int i, numthreads = 5;
if (argc > 1) numthreads = atoi(argv[1]);
pthread_t *threadid = malloc(numthreads*sizeof(pthread_t));
for (i=0; i<numthreads; i++) {
if (pthread_create(&threadid[i], NULL, sleepforabit, NULL) != 0) {
fprintf(stderr, "Error creating pthread[%i].\n", i);
numthreads = i;
break;
}
}
for (i=0; i<numthreads; i++) {
pthread_join(threadid[i], NULL);
}
free(threadid);
pthread_exit(0);
}