发生错误时pthread_create恢复

时间:2017-03-26 18:33:48

标签: c loops pthreads

我在while循环中创建线程。但是当我没有为新线程提供必要的内存时,会发生错误EAGAIN。如何务实地等待资源。

这是代码段

while(1){               
    if(pthread_create(&thread, NULL, method, (void*)parameters) != 0){
        perror("error");
        ----> here new attempt for creating thread
    }
}

thx for tips。

1 个答案:

答案 0 :(得分:1)

  

如何务实地等待资源。

pthread_create()EAGAIN失败时,它会说"资源不足,无法创建另一个帖子。"。

所以,你可以稍等一会儿再试一次。但要等多久?不同资源的不同系统的等待时间是否相同?在这种情况下,不可能有任何通用策略。

通常你想要在无限循环中创建线程(就像你使用while(1)循环一样)。一种常见的策略是使用thread pools创建固定数量的线程,这些线程重复执行任务。您可以根据系统资源(例如,可用的处理器数量)来决定线程数。

如果您需要线程执行某些任务并退出,那么您可以在分离状态中创建线程,以便在线程退出时自动清除特定于线程的资源(默认状态) joinable )因此可用于后续线程创建的更多资源。此外,您还可以随时限制活动线程数。

这一切都取决于您的应用程序的性质。从根本上说,您必须设计您的应用程序,使得既不会使系统过多,也不会使用比系统实际管理的线程更少的线程来利用系统。