veneur59
Messages postés5Date d'inscriptionlundi 2 février 2004StatutMembreDernière intervention21 janvier 2005
-
30 avril 2004 à 19:00
XsatanaX
Messages postés122Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention 5 mai 2004
-
3 mai 2004 à 12:50
Existe-t-il un moyen sur utilisant php et éventellement
MySql de vérouiller une ressource quelconque (tables
MySQL, fichier, opération php de mise à jour, ...) de
façon que le serveur ne puisse exécuter à la fois
plus d'une occurence d'une section critique php?
J'envisage déjà 2 possibilités :
-- Style sémaphore : je verrouille et j'attend que
la ressource soit libre si c'est pas le cas (sans sortir
du script php).
-- Style Test&Set : je verouille et si c'était déjà occupé
je termine le script en demandant au navigateur de
réessayer automatiquement un peu plus tard (1 ou 2 secondes plus tard par exemple).
(La seconde solution éviterrait que l'exécution d'un
script dure trop longtemps à cause de l'attente de
la libération du sémaphore par un autre.)
veneur59
Messages postés5Date d'inscriptionlundi 2 février 2004StatutMembreDernière intervention21 janvier 2005 3 mai 2004 à 11:55
En faite, les usages sont multiples et je cherchais une solution générique.
Exécuter un script à un instant donnée (exemple à 17H00, ce jour) m'interresse également. Ne pensant pas que c'était possible d'exécuter un script en dehors d'un événement autre que la lecture d'une page web par un Navigateur (ou autre client), je voulais faire en sorte de lancer le script de mise à jour quand serait effectuée la première requette après l'heure dite. (Donc vérifier si l'opération n'a pas déjà été faite, lire l'heure, faire l'opération puis mémoriser que
l'opération est faite.)
Mais comme l'état de la base ne sera pas stable pendant l'exécution du script, il ne faut pas que d'autre requette puisse avoir lieu pendant ce lapse de temps (si non gare aux bugs!)
Exemple: je commence par lire des donnée dans mes tables, je fais un calcul et je modifie ensuite mes tables en conséquence.
Il serait sans doute nécessaire pour traiter ce problème de connaitre les primitives php ou mysql (Primitives = Opérations non interruptibles qui ne peuvent donc être exécutés sur le serveur en même temps qu'une autre)