我在while循环中创建线程。但是,当我没有必要的新线程内存时,就会发生错误EAGAIN。如何务实地等待资源。
这是代码段
while(1){
if(pthread_create(&thread, NULL, method, (void*)parameters) != 0){
perror("error");
----> here new attempt for creating thread
}
}
提示。
最佳答案
如何务实地等待资源。
当pthread_create()
失败并显示EAGAIN
时,它说“资源不足,无法创建另一个线程。”。
因此,您可以稍等一下再尝试。但是要等多久?在具有不同资源的不同系统上,等待时间是否可以相同?在这种情况下,不可能有任何通用策略。
通常,您不想在无限循环中创建线程(就像使用while(1)
循环一样)。一种常见的策略是使用thread pools,在其中创建固定数量的线程,这些线程可以重复执行任务。您可以根据系统资源(例如,可用的处理器数量)决定线程数。
如果您需要线程来执行某些任务并退出,则可以以分离状态创建线程,以便在线程退出(默认状态为可联接)时自动清理特定于线程的资源,从而有更多资源可用于随后的线程创建。此外,您还可以随时限制活动线程的数量。
这完全取决于您的应用程序的性质。从根本上讲,您必须以这样一种方式设计应用程序:既不会使系统过载而导致过多的线程,也不会导致系统利用率不足,而导致线程不足以使系统无法实际管理。