Accès concurrents au disque

Accès concurrents au disque - C++ - Programmation

Marsh Posté le 01-05-2009 à 17:42:51    

Bonjour,
 
je développe un projet qui utilise des threads. Chaque thread fait des accès disques (création de fichiers, dossiers, etc...).
J'aimerai donc savoir comment sont gérés ces accès concurrents. Est-ce à moi de gérer cette concurrence ou est-ce pris en charge par le système d'exploitation (si oui, tous les OS fonctionnent-ils de la même façon ?)
 
Merci

Reply

Marsh Posté le 01-05-2009 à 17:42:51   

Reply

Marsh Posté le 01-05-2009 à 22:55:38    

La fonction standard fopen() n'a malheureusement pas de paramètre pour la gestion des accès conncurrents.
C'est pour cette raison, que, sous Windows, il y a l'API CreateFile(), voir http://bob.developpez.com/tutapiwin/article_40.php .
Pour les autres OS, je ne sais pas.

Reply

Marsh Posté le 01-05-2009 à 22:56:40    

non, tous les OS ne réagissent pas pareil. déjà cela dépend beaucoup du mode d'ouverture (ecriture, lecture, combiné, append...).
si je me souvient bien mes TP unix, deux fichiers peuvent etre ouverts de maniere concurrents en ecriture, l'ordre d'ecriture n'est simplement pas garanti.
en lecture, je ne pense pas que ca ne pose de probleme.
attention, l'api windows permet l'exclusion dans certains modes (bloquer un acces) ca peut causer de graves ralentissements/dead locks. (voir tortoise SVN.....)
si tu accèdes a des fichiers differents par contre aucun probleme non plus.
sous linux par exemple, rien ne passera vraiment dans les cables ATA avant au moins 30 secondes d'inactivité (commande sync automatique).
donc pas de prob de perfs.
 


---------------
http://projets.6mablog.com/
Reply

Marsh Posté le 01-05-2009 à 23:18:28    

Ok merci
 
En fait je travaille avec Boost.Filesystem pour écrire mes fichiers
Et tous les threads travaillent sur des fichiers différents. Par contre il se peut qu'ils doivent créer un même dossier, et dans ce cas je me demande ce qu'il se passerait.
 
On m'a aussi dit que ça pourrait faire se balader la tête de lecture du disque sans arrêt, et que ça serait pas trop bon. Qu'est-ce que vous en pensez ?

Reply

Marsh Posté le 02-05-2009 à 02:24:40    

j'ai envie de dire que c'est vraiment bête de s'en préoccuper.
tout va se passer en mémoire de toute facon. et si un jour ton OS décide de streamer ca au disque, il aura déja tout organiser par paquet ecrivables en sequence, le tout encore plus réorganisé par le native command queuing si l'os etait pas assez au courant de la disposition physique.
 
pour les dossiers, l'os va faire des synchro si tu veux en créer un qui existe déja il te signalera une erreur.


---------------
http://projets.6mablog.com/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed