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