我们在其中一个客户环境中面临着非常奇怪的问题。主线程启动目标pthread,然后等待pthread_join。然后我们运行由目标线程处理的流量,但几分钟后我们发现主线程在pthread_join之后恢复执行。目标线程尚未完成并仍在运行。这是在Solaris9 Sparc上运行的,我们已经使用ps -eLf命令验证了目标线程已启动的线程。
如果他们在Solaris9 Sparc上看到了POSIX线程的这种行为,那么任何人都可以提供帮助。
extern "C" void *launchSmtpThread(void *idp)
{
SmtpServerArg *serverArg = (SmtpServerArg*) idp;
int rc = startSmtpServer(serverArg);
cout <<"***********ERRORCODE from SMTP =="<<rc<<endl;
return NULL;
}
-------------------
------------------
int main(int argc, char* argv[])
{
----------------------
----------------------
smtpserverArg.config = &smtpConfig;
smtpserverArg.appAlocFn = &createSmtpApp;
pthread_t tid;
pthread_create(&tid, NULL, launchSmtpThread, (void *)&smtpserverArg);
-----------------
-----------------
//*****************************
//wait on SmtpServer thread
//*****************************
int status;
pthread_join(tid,(void**)&status);
cout<< "exiting main()"<<endl;
}