Bonjour,
Je suis actuellement en train d'écrire une petite application. Elle consiste à télécharger des pages web, extraire des meta keyword et des liens. Ces liens et ces metakeyword sont inséré dans la base de donnée. Et je télécharge à nouveaux les liens et les keywords.
J'ai besoin que plusieurs thread écrivent et lisent dans cette base. Je viens de passer plusieurs heures à me remémorer ce que j'avais appris sur les mutex, les sémaphores etc... et je dois avouer que ça me dépasse un peu.
Je pensais donc à une chose solution : est ce qu'il serai possible de bloquer l'écriture ou la lecture dans la base? C'est à dire qu'un seul thread ne peut avoir accès à la base, que ce soit en écriture ou en lecture.
Je pensais à une variable de classe (le patern singleton je crois). Je vérifie qu'aucun thread n'accède à la base, si c'est le cas on bloque, puis on y accède.
Pensez vous que c'est une bonne solution? Et quel outil utiliser? J'aimerai faire une opération atomique :
"Si aucun thread n'accède à la base, je bloque l'accès". Mais du coup, ça revient à faire une exclusion mutuelle si j'ai bien compris.
Est ce que le fait de bloquer ma base optimisera quand même mon programme? Je pense que le thread passera 80% du temps à envoyer la requette et télécharger la page. Il passera 20% du temps à lire ou écrire dans la base. C'est ce que je suppose, êtes vous d'accord avec cette idée?
Donc si ces 20% ne sont pas effectué en multithread, ça devrai quand même optimiser mon programme logiquement, non?
J'ai lu cette doc en particulier sur boost
http://miles.developpez.com/tutoriel...ost/thread/#LI
mais j'avoue que je n'ai rien compris aux concepts de ScopedLock, TryLock etc... Je n'ai pas trouvé les explications clair.
J'espère vous avoir exposé clairement mon problème. Merci pour votre attention, n'hesitez pas à me demander des précisions.
Merci!
Partager