我有一个叫做的线程 mainloop
即
int run_mainloop;
void* mainloop(void* param)
{
// local vars
// initialize local vars
while(run_mainloop)
{
// run mainloop
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
线程从一个叫做的函数中启动client_open
,即
int client_open()
{
run_mainloop = 1;
return pthread_create(&thread, NULL, mainloop, NULL);
}
Run Code Online (Sandbox Code Playgroud)
但是,mainloop
如果初始化局部变量失败,我需要立即通知client_open
提前退出.
pthread_join
是不合适的,因为它会阻止,我不能client_open
阻止.如果要在返回之前等待一小段时间就可以了.
如果不使用会阻塞的pthread_join,我怎么能以一种很好的方式做到这一点.我希望能够获得返回码.
使用pthread_tryjoin_np
是不正确的:新线程可以在pthread_create
返回和新线程实际执行初始化代码之间任意延迟。
如果您pthread_tryjoin_np
在这段延迟期间,连接将会失败,并且您会认为一切都“正常”,但实际上并非如此。
你想要的是一个条件:client_open
将等待它,并且mainloop
将向它发出信号(在完成初始化后)。