Topic de JohnnyGrosZboub :

[A L'AIDE] Exercice d'informatique qui nécessite +200 IQ

Supprimé

1. Synchronisation par ticket sans compteur commun

int ticket [N]; // Ticket pour chaque thread, il y a N threads
int number = 1; // Distributeur de tickets
int next = 1; // numéro du prochain ticket qui peut entrer en section critique

void *foo(void *arg) {
    int k = atoi((char *) arg); // k est le numéro du thread
    while(1) {
        ticket[k] = number; number = number + 1; // Je prends mon ticket
        while(ticket[k]!=next); //J'attend mon tour
        ... //On est dans la section critique
        next = next + 1;
    }
}

A partir du code précédent, dérivez une solution où on n'utilise plus la variable globale next (qui indique qui est le prochain thread à rentrer en section critique), mais où chaque thread compare la valeur de son ticket par rapport à la valeur des autres avant de décider de rentrer en section critique.

Je comprends pas comment on fait, aidez-moi, au secours

Désolé, le bas QI que je suis n'avait pas mis la consigne complète, c'est corrigé

Aidez-moi maintenant je vous en prie

Sorry mais si j'ai stop la programmation pour passer à autre chose c'est qu'il y a une raison https://image.noelshack.com/fichiers/2018/10/1/1520256134-risitasue2.png

Le 13 octobre 2021 à 17:51:50 :
Sorry mais si j'ai stop la programmation pour passer à autre chose c'est qu'il y a une raison https://image.noelshack.com/fichiers/2018/10/1/1520256134-risitasue2.png

Je déteste les ordinateurs

Je comprends pas comment on peut faire un machin d'exclusion mutuelle entre des threads si y'a pas un machin commun entre les threads

Pour moi comparer les numéros de tickets entre eux ça permet pas de faire ça quoi

Enfin je sais pas je comprends rien

J'en ai marre

Ecris moi ton truc en pseudo code dans un truc que je peux comprendre et je te le fais c'est de la logique pure mais la je bite rien a ton langage

Le 13 octobre 2021 à 18:04:26 :
Ecris moi ton truc en pseudo code dans un truc que je peux comprendre et je te le fais c'est de la logique pure mais la je bite rien a ton langage

Euh ok

VARIABLES
ticket : Tableau de N entiers
number = 1 : Entier
next = 1 : Entier
k : Entier

PROCEDURE foo
Reçoit arg : Entier

k = arg
TANT QUE 1 = 1 (boucle infinie quoi)
        ticket[k] = number; 
        number = number + 1; 
        TANT QUE ticket[k] != next //J'attend mon tour
                ... //On est dans la section critique
               next = next + 1;
        FIN TANT QUE
 FIN TANT QUE
C'est pas vraiment une question de logique c'est plutôt une question de savoir comment ces enculés d'ordinateurs parviennent à se synchroniser pour faire le même truc
Pitié quoi faites juste mon exercice à ma place et on en parle plus
Tu fais quelles études l'op ?

Le 13 octobre 2021 à 18:13:39 :
C'est n'importe quoi ton code il y a des races de partout, l'écriture dans une variable globale n'est pas thread-safe :pacg:

Oui ça je sais c'est même ce qu'il fallait expliquer à la question d'avant

Regarde des problèmes typiques comme rédacteur/leur, problème des philosophes... T'auras peut-être besoin d'utiliser un lock sur les tickets.

Données du topic

Auteur
JohnnyGrosZboub
Date de création
13 octobre 2021 à 17:45:39
Date de suppression
18 octobre 2021 à 16:00:17
Supprimé par
Auteur
Nb. messages archivés
34
Nb. messages JVC
31
En ligne sur JvArchive 306