int main(){

	Pilech pi=empty();
	pilel pl=emptyl();
	PileGe pg;
	Pile *L=pile_vide();
	menuu(pg,L);
	return 0;
}
Beispiel #2
0
void * wrapper(void *arg){
 
    arg_t * arg2 = arg;
    bloc_t bloc;
    bloc_t bret[2];
    int nb_bloc;
    int i;
        while(1){
            //on lock le mutex pour demarrer
            pthread_mutex_lock(&mutex1);
            
            // verif tri terminé, on debloque les threads bloqué + mutex
            if(pile_vide(&ma_pile) && arg2->compteur == 0){
                pthread_cond_broadcast(&cond);
                pthread_mutex_unlock(&mutex1);
                return NULL;
            }

            if(pile_vide(&ma_pile) && arg2->compteur > 0){
                //deverouille le mutex et attends que cond soit signalée
                pthread_cond_wait(&cond,&mutex1);
            }
            //si pile pas vide
            if(!pile_vide(&ma_pile)){
                arg2->compteur++;
                //on depile un bloc
                bloc = depile(&ma_pile);
                if(bloc.fin-bloc.debut > seuil_bloc_long){
                    //on le decoupe
                    nb_bloc = rapide_decoupebloc(bloc,bret);
                    //on empile les sous blocs
                    for(i = 0; i < nb_bloc; i++)
                        empile(&ma_pile,bret[i]);
                }
                else{
                    rapide_seq(bloc);
                }
                arg2->compteur--;
            }
            pthread_mutex_unlock(&mutex1);
        }
}
Beispiel #3
0
/* Effectue un tri rapide séquentiel */
void rapide_seq(bloc_t bloc_init) {
    pile p;
    int i, nb_blocs;
    bloc_t bloc;
    bloc_t blocs[2];

    init_pile(&p);
    empile(&p, bloc_init);

    /* Principe du tri rapide séquentiel :
     * tant qu’il y a des blocs à trier, dépile un bloc, le découpe en
     * (au maximum) deux sous-blocs non-encore triés et les empile */
    do {
        bloc = depile(&p);
        nb_blocs = rapide_decoupebloc(bloc, blocs);
        for (i = 0; i < nb_blocs; i++)
            empile(&p, blocs[i]);
    } while (!pile_vide(&p));
}