Lien du dépot GIT : [GIT](https://grond.iut-fbleau.fr/stiti/MiniProjet2)

# 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](#-description-générale)
- 🎯 [Objectifs du projet](#-objectifs-du-projet)
- 📁 [Données](#-données)
- 🛠️ [Générateur de données](#-générateur-de-données)
- 🔓 [Transactions non sécurisées](#-transactions-non-sécurisées)
- 🔒 [Transactions sécurisées](#-transactions-sécurisées)
- 🔒 [Transactions sécurisées avec thread](#-transactions-sécurisées-avec-thread)
- 🤝 [Auteurs](#-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 :
1. Une version non sécurisée, exposant les incohérences possibles sans précautions.
2. Une version sécurisée, utilisant des verrous pour garantir la cohérence.
3. 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](./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](./DataGenerator)** 
- **Fichiers**:
  - `README.md`: Documentation sur l'utilisation du générateur.
  - `generate_accounts.c`: Code source pour générer `accounts.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](./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](./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](./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 :
- Moncef STITI - [@stiti](https://grond.iut-fbleau.fr/stiti)
- Lenny FOULOU - [@foulou](https://grond.iut-fbleau.fr/foulou)