version 1.127, 2013/05/22 09:25:47
|
version 1.129, 2013/05/22 13:40:12
|
Line 151 thread_surveillance_signaux(void *argume
|
Line 151 thread_surveillance_signaux(void *argume
|
// Dans un second temps, on balaye toutes les queues de signaux |
// Dans un second temps, on balaye toutes les queues de signaux |
// des threads du processus courant. |
// des threads du processus courant. |
|
|
|
// Attention : l'ordre de verrouillage des mutexes est important |
|
// pour éviter les conditions bloquantes ! |
|
|
|
pthread_mutex_lock(&mutex_interruptions); |
pthread_mutex_lock(&mutex_liste_threads); |
pthread_mutex_lock(&mutex_liste_threads); |
|
|
l_element_courant = liste_threads; |
l_element_courant = liste_threads; |
|
|
while(l_element_courant != NULL) |
while(l_element_courant != NULL) |
Line 161 thread_surveillance_signaux(void *argume
|
Line 166 thread_surveillance_signaux(void *argume
|
{ |
{ |
if ((*(*((struct_thread *) (*l_element_courant).donnee)) |
if ((*(*((struct_thread *) (*l_element_courant).donnee)) |
.s_etat_processus).pointeur_signal_ecriture != |
.s_etat_processus).pointeur_signal_ecriture != |
(*(*((struct_thread *) (*l_element_courant).donnee)) |
(*(*((struct_thread *) (*l_element_courant) |
.s_etat_processus).pointeur_signal_lecture) |
.donnee)).s_etat_processus) |
|
.pointeur_signal_lecture) |
{ |
{ |
nombre_signaux_envoyes++; |
nombre_signaux_envoyes++; |
pthread_kill((*((struct_thread *) (*l_element_courant) |
pthread_kill((*((struct_thread *) |
.donnee)).tid, SIGALRM); |
(*l_element_courant).donnee)).tid, SIGALRM); |
} |
} |
} |
} |
|
|
Line 174 thread_surveillance_signaux(void *argume
|
Line 180 thread_surveillance_signaux(void *argume
|
} |
} |
|
|
pthread_mutex_unlock(&mutex_liste_threads); |
pthread_mutex_unlock(&mutex_liste_threads); |
|
pthread_mutex_unlock(&mutex_interruptions); |
|
|
// Nanosleep |
// Nanosleep |
|
|
Line 2954 envoi_signal_thread(pthread_t tid, enum
|
Line 2961 envoi_signal_thread(pthread_t tid, enum
|
|
|
struct_processus *s_etat_processus; |
struct_processus *s_etat_processus; |
|
|
if (pthread_mutex_lock(&mutex_interruptions) != 0) |
|
{ |
|
pthread_mutex_unlock(&mutex_liste_threads); |
|
return(1); |
|
} |
|
|
|
if (pthread_mutex_lock(&mutex_liste_threads) != 0) |
if (pthread_mutex_lock(&mutex_liste_threads) != 0) |
{ |
{ |
return(1); |
return(1); |
Line 2988 envoi_signal_thread(pthread_t tid, enum
|
Line 2989 envoi_signal_thread(pthread_t tid, enum
|
s_etat_processus = (*((struct_thread *) (*l_element_courant).donnee)) |
s_etat_processus = (*((struct_thread *) (*l_element_courant).donnee)) |
.s_etat_processus; |
.s_etat_processus; |
|
|
|
if (pthread_mutex_lock(&mutex_interruptions) != 0) |
|
{ |
|
pthread_mutex_unlock(&mutex_liste_threads); |
|
return(1); |
|
} |
|
|
(*s_etat_processus).signaux_en_queue |
(*s_etat_processus).signaux_en_queue |
[(*s_etat_processus).pointeur_signal_ecriture] = signal; |
[(*s_etat_processus).pointeur_signal_ecriture] = signal; |
(*s_etat_processus).pointeur_signal_ecriture = |
(*s_etat_processus).pointeur_signal_ecriture = |