Bonjour à tous,
Nous avons développé pour un client une application, basée sur une API.
Les utilisateurs travaillent sur une applet JAVA, ils y saisissent des commandes (l'applet ressemble à une sorte de prompt). A travers l'API, nous récupérons les commandes qu'ils saisissent à l'aide de callbacks, et effectuons des actions en fonction de ces commandes (comme envoyer des messages sur l'écran de l'applet).
Nous sommes obligés d'utiliser divers threads pour gérer certaines de ces actions, sinon, nous bloquons totalement l'API (pas uniquement le temps du traitement).
Passons au vif du sujet : jusqu'à la semaine dernière, il n'y avait aucun souci.
Seulement, le parc informatique de notre client a été récemment mis à jour, et ils ont maintenant des machines bien plus véloces.
Depuis, des erreurs bizarres ont commencé à faire leur apparition : nous avons de temps en temps droit au fameux "une erreur système inattendue est survenue", ou encore Windows qui prends les devants avec un joli "L'application blabla.exe a rencontré un problème et doit fermer", ou encore un joli "pure virtual function call" du runtime distribuable visual c++.
Ces messages d'erreur me sont plutôt familier, étant donné que je les ai croisé maintes fois lors des plantages de Windev pendant les développements...
Enfin, après avoir réfléchi à l'origine du problème, je me suis demandé si cela ne pouvait pas venir du fait que l'application soit multithread.
Je suis dans l'obligation d'utiliser quelques variables globales pour gérer certaines valeurs qui peuvent être modifiées dans un thread et lues dans un autre.
Je me demandais donc si la source du problème pouvait venir du fait qu'un des threads essaie de lire un variable, et qu'au même moment, un autre thread essaie d'écrire dans cette même variable ?
Dois-je mettre en place des fonctions de lecture et d'écriture pour ces variables que je protègerais à l'aide de sémaphores ?
Est-ce que je suis totalement à côté de la plaque ?
J'attends avec impatience vos commentaires et impressions face à ce problème.
Partager