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
Version imprimable
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:P
http://msdn2.microsoft.com/en-us/lib...30(VS.85).aspx
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...
Dans ce cas, je dirais que tout verrouillage est inutile: L'ouverture en écriture est exclusive, même pour le même processus...
Normalement oui, sous Windows...
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!
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.