bonjour,
étant donné plusieurs threads écrivants chacun des données de taille importante, dans le meme fichier, il semble évident d'utiliser un genre de mutex !
quelle fonction utiliser ? existe - t - il une fonction portable aussi ?
merci
bonjour,
étant donné plusieurs threads écrivants chacun des données de taille importante, dans le meme fichier, il semble évident d'utiliser un genre de mutex !
quelle fonction utiliser ? existe - t - il une fonction portable aussi ?
merci
Si ce sont des threads d'un même processus, tu peux utiliser une section critique pour protéger ta ressource. C'est le plus simple à utiliser et le plus léger en termes de ressources utilisées.
InitializeCriticalSection(), EnterCriticalSection(), LeaveCriticalSection() et DeleteCriticalSection() sont tes amis
http://msdn2.microsoft.com/en-us/lib...30(VS.85).aspx
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
je viens juste de voir qu'il existe LockFileEx(), UnLockFileEx()...
est-ce conseillé de les utiliser ?
merci
Pas pour ça, à ma connaissance.
Tant que le fichier reste ouvert par ton processus, il vaut mieux partager son handle/descripteur/FILE* et en protéger l'accès avec une section critique...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Dans ce cas, je dirais que tout verrouillage est inutile: L'ouverture en écriture est exclusive, même pour le même processus...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Chacun de mes thread ouvre le fichier de cette façon :mais ca n'empêche pas que parfois certaines données se mélangent complètement avec d'autres...donc y-a-t-il vraiment de l'exclusion ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fopen("fichier","ab");...fclose();
Normalement oui, sous Windows...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En fait, je me suis trompé. fopen() ne verrouille pas.
Edit: Tiens, c'est marrant, fopen_s() verrouille l'écriture et pas fopen()...
Mais tu peux utiliser_fsopen() pour que l'ouverture soit exclusive. Seulement, l'ouverture échouera immédiatement sur les autres threads au lieu d'attendre.
Ce qui nous laisse deux mécanismes de synchronisation possibles:
- Verrouillage avec une section critique ou bien LockFile[Ex]
- Ou centralisation de toutes les écritures sur un thread à part, avec système de file d'attente et modèle producteur/consommateur. Y penser!
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
je viens de voir qu'il existait aussi CreateMutex(), ca semble bon pour ce qu'on veut faire...
merci
Un mutex, c'est comme une section critique, mais potentiellement en inter-processus.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager