Как определить ранний выход из pthread_create без слишком долгой блокировки?

У меня есть поток с именем mainloop

т.е.

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, который будет блокировать. Я хочу получить код возврата.

5
задан AusCBloke 2 January 2012 в 22:07
поделиться