Originariamente inviato da 88Leo88
In maniera pratica perchè io altrimenti ti giuro non capisco come sistemeresti il codice?
Non m'intendo molto di pthread quindi prendili come suggerimenti di massima (nel senso che poi dovrai mettere le giuste funzioni)
codice:
/* variabile globale di tipo mutex fornita dai pthreads */
var global_mutex;
/* variabile di controllo globale da proteggere con un mutex */
int exit_from_thread; 
int main()
{
    int t_max;
    float accuracy;
    printf("inserisci il tempo massimo di attesa(espresso in secondi): ");
    scanf("%d", &t_max);
    printf("inserisci il grado di accuratezza");
    scanf("%f", &accuracy);
    pthread_t thread_leibniz;
    exit_from_thread = 0;

    /* pseudo codice */   
    init_mutex( global_mutex );   

    pthread_create(&thread_leibniz, NULL, thread_function, &accuracy);
    sleep(t_max); /* sospende il main per tot tempo */

    /* pseudo codice per la critical region */   
    mutex_lock( global_mutex )
    exit_from_thread=1;
    mutex_unlock ( global_mutex );

    pthread_join(thread_leibniz);

}

void *thread_function(void *arg)
{
    ...
    /* variabile temporanea */
    int request_for_exit = 0;
    do {
        ...
        /* mai uscire dalla funzione senza aver rilasciato il mutex o si blocca tutto */
        mutex_lock( global_mutex )
        if (exit_from_thread==1) {
            request_for_exit = 1;
        }
        mutex_unlock ( global_mutex );
    
    } while (fabs(error) > accuracy && check == 0 && request_for_exit !=0 );
    printf("Il valore di pigreco approssimato a %f è %f\n", accuracy, pi_grecotot);
    return NULL;
    
}