以下のコマンドを使用して、システムが許可する最大スレッド数を表示します。
# cat /proc/sys/kernel/threads-max
そして番号は772432です。
ただし、以下のコードを使用して 100 万のスレッドを作成します。そして、それは機能します。
#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);
}
出力は次のとおりです。
Maximum number of threads per process is = 1000000
これはスレッドの最大数を超えています。これの理由は何ですか?pthread_create
また、スレッドはカーネルスレッドと同じように作成されますか?
私のOSはFedora 16で、12コア、48G RAMです。