最近在Solaris10的系统上运行运行一个多线程的服务器,遇到一个奇怪的现象,不知哪位高人能指点一下:
在一个进程的主线程内不断创建detach方式的工作线程,创建到线程id为65536后就一直创建失败,
显示错误码为11,resource temporarily unavailable
每个工作线程只是简单输出一行信息就退出
使用prstat查看,该进程内也没有发现未退出的线程
简单的测试代码片段如下:
void* worker (void *arg)
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("A NewThread is running!\n")));
return NULL;
}
int main(int argc, char *argv[])
{
while(true)
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("main thread!\n")));
ACE_thread_t threadid;
ACE_hthread_t threadHandle;
int ret = ACE_Thread::spawn(
(ACE_THR_FUNC)worker,
NULL,
THR_DETACHED|THR_NEW_LWP,
&threadid,
&threadHandle
);
if(ret != 0)
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("thread activate failed, ret:%d, errno:%d:%s\n"), ret, errno, strerror(errno)));
}
ACE_OS::sleep(ACE_Time_Value(0, 500000));
}
}