Lien du dépot GIT : GIT
Miniprojet 2 - Concurrence 🏦
Ce projet explore les défis de la gestion concurrentielle dans une "base de données bancaire". À travers deux implémentations (sécurisée et non sécurisée), nous analysons les problèmes d'accès concurrent et proposons une solution à l'aide de verrous.
📚 Table des matières
- 📖 Description générale
- 🎯 Objectifs du projet
- 📁 Données
- 🛠️ Générateur de données
- 🔓 Transactions non sécurisées
- 🔒 Transactions sécurisées
- 🔒 Transactions sécurisées avec thread
- 🤝 Auteurs
📖 Description Générale
Le projet met en œuvre des transactions simulées entre comptes bancaires en conditions concurrentielles. Deux versions ont été développées :
- Une version non sécurisée, exposant les incohérences possibles sans précautions.
- Une version sécurisée, utilisant des verrous pour garantir la cohérence.
- Une version bonus, utilisant des verrous et des threads.
Chaque version est documentée et accompagnée de son code source dans des sous-répertoires dédiés.
🎯 Objectifs du Projet
- Mettre en évidence les effets néfastes d'une mauvaise gestion des accès concurrents.
- Implémenter une solution robuste en utilisant des verrous pour assurer la cohérence tout en conservant un bon niveau de parallélisme.
📁 Données
Le répertoire Data contient la base de données accounts.db
, qui sert de point de départ pour les transactions. Chaque ligne correspond à un compte bancaire avec un nom et un solde initial.
- Accéder au répertoire Data
- Fichiers:
accounts.db
: Fichier texte simulant une base de données avec des comptes.
🛠️ Générateur de Données
Le répertoire DataGenerator contient un programme pour générer une base de données bancaire. Cela permet de créer des fichiers .db
personnalisés pour vos tests.
- Accéder au répertoire DataGenerator
- Fichiers:
README.md
: Documentation sur l'utilisation du générateur.generate_accounts.c
: Code source pour généreraccounts.db
.
🔓 Transactions Non Sécurisées
Le répertoire Unsecured contient une implémentation basique de gestion de transactions bancaires.
Problème : Sans mécanismes de protection, les accès concurrents entraînent des incohérences dans les soldes.
- Accéder au répertoire Unsecured
- Fichiers:
README.md
: Documentation sur l’utilisation du programme ainsi que des tests et observations.unsecured_transaction.c
: Code source.
🔒 Transactions Sécurisées
Le répertoire Secured contient une version améliorée avec des verrous (fonction lockf) pour résoudre les problèmes d'accès concurrent.
- Accéder au répertoire Secured
- Fichiers:
README.md
: Documentation sur l'implémentation sécurisée.secured_transaction.c
: Code source.
🔒 Transactions Sécurisées avec Thread
Le répertoire SecuredThread contient une version améliorée de la version avec des verrous mais cette fois avec des threads.
- Accéder au répertoire SecuredThread
- Fichiers:
README.md
: Documentation sur l'implémentation sécurisée avec threads.secured_transaction_threads.c
: Code source.
🤝 Auteurs
Ce projet a été réalisé avec amour par :