Quando si utilizzano i thread posix, esiste un modo per "proteggere" il thread principale dagli errori (come i riferimenti null, la divisione per zero, ecc.) Causati dai thread worker. Per "thread di lavoro" intendo un thread di posix creato da pthread_create().Protezione del thread principale dagli errori nella thread di lavoro
Purtroppo, non siamo in grado di utilizzare le eccezioni - in modo da non "cattura", ecc
Ecco il mio programma di test (C++):
void* workerThreadFunc(void* threadId) {
int* a = NULL;
*a = 5; //Error (segmentation fault)
pthread_exit(NULL);
}
int main() {
cout << "Main thread start" << endl;
pthread_t workerThread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&workerThread, &attr, workerThreadFunc, (void*)0);
pthread_join(workerThread, NULL);
cout << "Main thread end" << endl;
}
Nell'esempio di cui sopra, l'errore causato dalla workerThread volontà terminare l'intero programma. Ma vorrei che il thread principale continuasse a funzionare nonostante questo errore. È possibile raggiungere questo obiettivo?
'Sfortunatamente, non possiamo usare eccezioni - quindi non "prendere", ecc. - certo che puoi. L'eccezione verrà generata nel thread che lo ha generato. –
Il modo migliore per "proteggere" gli altri thread da eccezioni/errori per correggerli in modo che non accadano o vengano rilevati e gestiti/registrati/qualsiasi cosa. –
Nota: nell'esempio sopra, stai tentando di unirti a un thread che non è stato ancora creato. –