Bonjour a tous !
J'ai deux programmes qui communiquent grace aux SHM ( shared mermory ), et pour pouvoir gerer la lecture ecriture des données , j'ai opté pour la technique e "busy,wait": un programme attend que le recepteur sois pres et quand celui-ci l'est, bloque l'ecriture et indique au lecteur qu'une donnée est presente. tout ceci jusqu'a ce que le lecteur puisse debloquer ls situation et permettre une nouvelle ecriture. Ceci marche tres bien et roule comme sur des roulettes et il n'y a aucun deadlock ( pour le moment, avec un mois que l'application tourne ).
Oui, mais voila, pour verfier que le programme ecrivain n'as rien a dire, j'utilise une boucle
Comme nous pouvons le voir, le processeur est tout le temps a 100% de ses capacitées ici ( pas de sleep ou else)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 while(1){ while (rien a dire){ rien } else{ bloquer_ecriture(); lire_la_donnee(); debloquer_ecriture(); } }
Donc je me demandais si il existait quelque chose pour pouvoir changer cette ligne :
while (rien a dire)
et surtout comment s'y prendre.
Je suis pres a reprendre le code from scratch si vous jugez qu'une autre technique plus efficace et moins "bourrine" marchera ( et surtout laquelle).
PS : le lock est dans le shm lui aussi.
Tartine
Partager