如何检测pthread_create提前退出而不会阻塞太长时间?

Mat*_*att 5 c linux

我有一个叫做的线程 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,我怎么能以一种很好的方式做到这一点.我希望能够获得返回码.

Emp*_*ian 4

使用pthread_tryjoin_np是不正确的:新线程可以在pthread_create返回和新线程实际执行初始化代码之间任意延迟。

如果您pthread_tryjoin_np在这段延迟期间,连接将会失败,并且您会认为一切都“正常”,但实际上并非如此。

你想要的是一个条件:client_open将等待它,并且mainloop将向它发出信号(在完成初始化后)。