C++ read-write access threadsafe - C++ - Programmation
Marsh Posté le 03-02-2003 à 20:21:39
et ben tu devrais commencer à regarde le man de open pour une ouverture exclusive et t'a qu'a faire une jolie classe wrapper pour fstream avec un petit pthread_mutex_t
Marsh Posté le 03-02-2003 à 20:49:21
Merci :-)
Que veux-tu dire par classe wrapper ? une classe interface qui a pour var private un mutex dont je me servirais pour faire un lock a chaque acces ?
J'ai aussi des données (var privées d'un singleton threadsafe) que je veux pouvoir changer en read/write access, tout comme le fichier...
Marsh Posté le 03-02-2003 à 22:42:07
exactement: juste une classe d'enrobage avec la classe a enrober en public (ici un fstream), un mutex en privé et 2 jolis fonctions lock & unlock, c'est la solution la plus rapide et la meilleure: le verrou est utilisable en encadrant une seule opération( un write par exemple) mais aussi sur un ensemble pour assurer la cohérence de la transaction
Marsh Posté le 04-02-2003 à 11:10:42
Merci, c ce que je pensais faire a peu pres.
Au debut je pensais faire une class read/write access pour une meilleure optimisation, avec semaphore et gate, ms c plus long a implementer.
Un truc ce ce style :
Code :
|
Mais j'aurais du mal a rendre cette solution multiplatforme..
Ta solution suffira, et est tout aussi sure. Merci encore.
Marsh Posté le 04-02-2003 à 13:41:41
peut etre est-il mieux de voir du coté des attentes passives plutot que des boucles (pthread_cond_wait)
Marsh Posté le 04-02-2003 à 16:27:39
Tu as surment raison, je ne connaissais pas pthread_cond_wait ...
Je vais voir ca.
Merci
Marsh Posté le 04-02-2003 à 17:34:04
while (writer_count > 0) {
Mutex::Unlock();
read_barrier.Wait();
Mutex::Lock();
tout ça remplacer par une jolie condition, et ça va marche du tonnerre
il y a aussi des semaphores avec les linuxthread (pas les meme que SysV)
man 3 sem_init
tres facile d'emploi
Marsh Posté le 05-02-2003 à 14:38:56
Une jolie condition ? Que veux-tu dire ??
Moi je souhaiterai utilser les Posix threads (Unix).
Merci !
Marsh Posté le 03-02-2003 à 17:18:20
Bonjour,
Je souhaiterai proteger le lecture et l'ecriture d'un fichier en environnement multithread, afin de permettre a plusieurs clients de lire un fichier en meme temps mais un seul client doit pouvoir le modifier pdt que les autres sont bloqués.
Un truc du style Readers/Writer Lock Class avec mutex ou autre....
Et j'aurai besoin d'implementer ca surtout sous Unix.
Pouvez-vous m'aider ??