Bonjour à tous,
Cela fait quelques jours que l'on retourne le problême dans tous les sens, impossible de trouver la solution...
J'ai une 20aine de processus perl qui tourne en même tps, et qui tape dans la même bdd mysql.
on a une table commune, qui est une liste d'attente d'action a traiter. Cette table a une colonne "enCoursDeTraitement" ( 0/1 ) qui determine si l'action est déjà en cours de traitement par un autre processus.
Un processus fait donc un
puis, un fois qu'il a récupéré son action,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT idAction FROM actions WHERE enCoursDeTraitement = 0 LIMIT 1;
Le hic, c'est qu'avec 20 processus, il arrive plus que fréquemment qu'entre le SELECT et l'UPDATE, d'autre processus font un SELECT, et récupére la même action.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UPDATE actions SET enCoursDeTraitement = 1 WHERE idAction=$idAction;
Ce qui fait que l'action est traitée plusieur fois.
Quel pourrait être la solution a ce problême ?
Partager