[C Ansi] Thread POSIX problème de synchronisation

Thread POSIX problème de synchronisation [C Ansi] - C - Programmation

Marsh Posté le 20-02-2005 à 23:08:13    

Bonjour,
 
Je doit faire un logiciel qui doit analyser le signal micro en temps réel.
 
Pour celà j'utilise <pthread.h> de POSIX. J'ai deux thread, un qui récupère les 10 dernières ms du signal (cette opération est blocante et met 10ms), et l'autre
qui analyse les 10 ms précédentes.
 
Tous les échantillons du signal récupérés doivent être analysés et il doit y en avoir 100 par seconde (car il ya 100*10ms en 1sec). Je doit donc synchroniser mes threads. Pour celà j'uilise la procedure pthread_yield().
 
Mais en placant cette procedure je constate une baisse énorme de performance, en effet mes thread tournent 10 fois trops lentement et je récupère donc seulement 10*10ms en une seconde, soit 90% d'échantillons perdus :-(.
 
Au début j'ai penser que mon analyse pouvait être à l'origine de ces pertent de performance, mais j'obtient les mêmes résultats quand mes deux thread ne font que boucler sans éffectuer aucune opération, elle se donnet juste la main avec pthread_yield.
 
Merci de bien vouloir m'apporter votre aide.


Message édité par totalchuck le 20-02-2005 à 23:09:10
Reply

Marsh Posté le 20-02-2005 à 23:08:13   

Reply

Marsh Posté le 21-02-2005 à 11:56:05    

Nan, ça m'a pas l'air d'être la bonne approche.
Yield ne permet pas de faire de la synchronisation: ça demande juste au système de passer une autre tâche en avant-plan si nécessaire (ce n'est donc même pas obligé, car si l'autre tâche attend aussi, le focus revient sur l'appelant).
 
Il faut que ta thread qui analyse les données fasse une attente passive à la fin de son traitement pour attendre les 10 ms suivants. Et il faut que ta thread qui reçoit les données signale à la thread d'analyse que 10ms de plus sont disponibles.
 
Utilises donc des variables conditionnelles, via pthread_cond_wait.
 
Visiblement, il y a un exemple là:
http://www.cs.sfu.ca/CC/300/zzhang [...] nditions.c

Reply

Marsh Posté le 21-02-2005 à 20:24:27    

une variable conditionnel ou un mutex je dirais moi...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed