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) }
A voir également:
- Calcul 8 threads excel
- Clé windows 8 - Guide
- Calcul moyenne excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Mixcraft 8 - Télécharger - Création musicale
2 réponses
Bonjour,
Corrige déjà les erreurs de compilations :
Ensuite il y a les erreurs de raisonnement. Ta fonction
J'imagine qu'à un moment tu voudras récupérer l'heure courante, cette page pourrait t'aider.
Bonne chance
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 fonction
heuretravaille sur un tableau
tab_heurequi 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
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.
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.