Problème de threads
jacky
-
pthread -
pthread -
Bonjour,
J'ai un problème de synchronisation avec ce code.
Qu'est-ce que je dois faire corriger cela ?
Merci
J'ai un problème de synchronisation avec ce code.
Qu'est-ce que je dois faire corriger cela ?
Merci
#include <stdio.h>
#include <pthread.h>
int tab_heure[5];
void heure(){
for(;;) {
tab_heure[0] = (tab_heure[0] + 1) mod 1000;
if (tab_heure[0] = 0
tab_heure[1] = (tab_heure[1] + 1) mod 60;
if (tab_heure[1] = 0
tab_heure[2] = (tab_heure[2] + 1) mod 60;
if (tab_heure[2] = 0
tab_heure[3] = (tab_heure[3] + 1) mod 24;
if (tab_heure[3] = 0
tab_heure[4] = tab_heure[4] + 1; attendre (1 seconde); }
}
main()
{
pthread_t num_thread;
if (pthread_create(&num_thread, NULL, (void *(*)())heure, NULL) == -1)
perror ("pb pthread_create\n");
for(;;) {
printf(
"L’heure du système est : %d jour,%d heure;%d minutes,%d secondes,%d, millisecondes",
tab_heure[4],
tab_heure[3],
tab_heure[2],
tab_heure[1],
tab_heure[0]
)
};
attendre (5 secondes)
}
2 réponses
-
Bonjour,
Corrige déjà les erreurs de compilations :- Certains parenthèses ne sont pas fermées (voir tes
if
) - En C, un test d'égalité s'écrit
==
- En C, toute fonction à un type de retour (quitte à ce que ce soit
void
) : ton main devrait retourner unint
(par convention 0 si tout va bien, une valeur non nulle sinon). - L'opérateur modulo ne s'écrit pas
mod
mais%
. - La fonction
attendre
n'existe pas. Peut-être voulais-tu utilisersleep
?
Ensuite il y a les erreurs de raisonnement. Ta fonctionheure
travaille sur un tableautab_heure
qui n'est pas initialisé. Son comportement est donc indéterminé. Tous tes threads travaillent sur une structure commune. Tant que cette structure est en lecture seule, ça n'est pas grave, mais sinon il faudrait gérer les accès concurrents, ou avoir une structure par thread.
J'imagine qu'à un moment tu voudras récupérer l'heure courante, cette page pourrait t'aider.
Bonne chance - Certains parenthèses ne sont pas fermées (voir tes
-
Plusieurs soucis :
1) l'heure n'est collectée nulle part.
2) les composants de l'heure ne sont pas toujours calculés, mais il sont toujours affichés.
3) les composants de l'heure ne sont pas calculés atomiquement, on peut passer de 14h59 à 14h00 avant d'arriver à 15h00.
4) la fonction heure calcule en permanence, elle engloutit la puissance de calcul.
5) une bonne synchronisation serait que l'heure envoie un pthread_cond_signal() quand elle détecte un changement d'heure avec un processus principal qui attend par pthread_cond_wait() pour afficher le changement.