我有一个名为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将对其发出信号(在初始化时完成)。

10-08 08:20