私はCでのスレッドへの最初の挑戦でいくつかの問題を抱えています。ソケット接続を受け入れ、それを処理するための新しいスレッドを開始する非常に単純なサーバープログラムを書くことを試みています。これは、pthread_create()がEAGAINコードで失敗する前に、約300スレッド(303、時には304)しか作成されないことを除いて、正常に動作しているようです。pthread_create()は、2つのスレッドしかアクティブでないとなぜ失敗するのですか?
"システムに別のスレッドを作成するために必要なリソースがありません。プロセス{PTHREAD_THREADS_MAX}内のスレッドの総数に対するシステムの制限が超過します。
これは同時に012スレッドを終了します - 各スレッドはgdbによって確認されます。プロセス要求関数が呼び出されるたびに、2つのスレッドが実行されます。
これは、「システムに必要なリソースが不足している」という意味です。私の質問は(そしてそれは少し愚かかもしれない) - これらのリソースは何ですか?おそらくそれは私のプログラムのメモリリークだ(確かに可能であろうが、おそらく可能性もある)が、プログラムの残りの部分を考えると300以上を管理できると思っていただろう。
私のプログラムがメモリ不足であることを確認するために使用可能なメモリ量を確認する方法はありますか?十分なメモリとスワップがありますので、おそらくOS(Linux)によって人為的な制限が課されていると思われます。
おそらくおかげ
あなたが投稿することができますスレッドを作成して破棄するコードスニペット? –