我有一个名为mainloop
的线程
IE。
int run_mainloop;
void* mainloop(void* param)
{
// local vars
// initialize local vars
while(run_mainloop)
{
// run mainloop
}
return 0;
}
该线程从名为
client_open
的函数开始,即int client_open()
{
run_mainloop = 1;
return pthread_create(&thread, NULL, mainloop, NULL);
}
但是,在
mainloop
中,如果初始化局部变量失败,则需要立即通知client_open
提前退出。pthread_join
是不适当的,因为它会阻止,我不能阻止client_open
。如果要等一会儿再返回就可以了。
我怎么能以一种不错的方式做到这一点,而无需使用会阻塞的pthread_join。
我希望能够获得返回码。
最佳答案
使用pthread_tryjoin_np
是不正确的:新线程可以在pthread_create
返回与新线程实际执行初始化代码之间任意延迟。
如果在此延迟期间使用pthread_tryjoin_np
,则连接将失败,并且您将确定一切都“正常”,而实际上并非如此。
您想要的是一个条件:client_open
将在其上等待,并且mainloop
将对其发出信号(在初始化时完成)。