138 lines
4.7 KiB
Markdown
Raw Permalink Normal View History

2024-12-04 09:45:21 +01:00
# 🔒 Transactions Sécurisées avec Threads
Ce programme simule des transactions bancaires concurrentes en utilisant des **threads**, une approche plus efficace et légère que les processus. Les threads exécutent des transactions entre comptes bancaires, tout en partageant les ressources de manière optimale grâce à des mécanismes de verrouillage qui garantissent l'intégrité des données.
---
## 📋 Description du Programme
Le programme utilise des threads pour gérer plusieurs transactions simultanées entre comptes bancaires stockés dans un fichier de base de données. Contrairement à une version basée sur des processus, cette approche utilise un espace mémoire partagé, réduisant les coûts de communication et augmentant la performance.
### Fonctionnalités principales :
1. **Gestion multithreadée des transactions :**
Chaque thread effectue un certain nombre de transactions aléatoires entre les comptes bancaires.
2. **Synchronisation avec Mutex :**
Des verrous sont utilisés pour garantir des accès sécurisés au fichier contenant les comptes, empêchant les corruptions de données.
3. **Optimisation des ressources :**
Les threads partagent la mémoire et les ressources du processus parent, réduisant les coûts liés à la création et à la gestion des entités concurrentes.
4. **Calcul du solde total :**
Le programme vérifie l'intégrité des données en calculant le solde total avant et après les transactions.
---
## ⚙️ Compilation et Exécution
### Compilation
Utilisez le fichier `Makefile` pour compiler le programme :
```bash
make
```
Cela génère un exécutable nommé `secured_transaction_threads`.
### Exécution
Exécutez le programme en spécifiant :
- Le nombre de threads à lancer.
- Le nombre de transactions par thread.
Exemple :
```bash
./secured_transaction_threads 4 10
```
Ici, 4 threads seront créés, chacun effectuant 10 transactions.
---
## 🛡️ Pourquoi utiliser des Threads ?
### **1. Partage de Mémoire :**
- Les threads partagent l'espace mémoire du processus parent, ce qui permet un accès rapide et direct aux données.
- Dans cette application, tous les threads peuvent accéder et modifier les comptes bancaires sans mécanismes complexes de communication inter-processus.
### **2. Performance Optimisée :**
- Les threads sont plus légers que les processus. La création d'un thread est moins coûteuse en temps et en ressources.
- La commutation de contexte entre threads est plus rapide que celle entre processus, ce qui améliore les performances globales.
### **3. Synchronisation Facile :**
- Grâce aux primitives comme les **mutex**, les threads peuvent synchroniser leurs accès aux ressources partagées de manière efficace.
- Ici, un mutex est utilisé pour s'assurer qu'un seul thread à la fois modifie le fichier des comptes bancaires.
### **4. Adapté au Parallélisme :**
- Les threads permettent de tirer parti des architectures multicœurs, ce qui accélère les transactions simultanées.
---
## 🛑 Problèmes Résolus
### **1. Incohérences de Données :**
Les mécanismes de verrouillage garantissent que chaque transaction est exécutée de manière atomique. Cela empêche les conflits d'accès entre plusieurs threads.
### **2. Solde Final Correct :**
Grâce à la synchronisation, le solde total des comptes reste cohérent avant et après les transactions.
### **3. Gestion des Transactions :**
Chaque transaction est complètement exécutée avant qu'une autre ne puisse accéder aux mêmes données.
---
## 📜 Exemple de Résultat
### Avant l'exécution
Le fichier `accounts.db` contient :
```plaintext
...
Diana 7145
Diego 8494
Dominic 4487
Dylan 1157
Easton 429
Eden 5737
Edward 3671
Elaina 4904
...
```
### Compilation et exécution
On compile le programme avec :
```bash
make
```
ou
```bash
gcc secured_transaction_threads.c -o secured_transaction_threads -pthread
```
Puis, on exécute :
```bash
./secured_transaction_threads 4 10
```
### Après l'exécution
Voici une sortie typique du programme :
```plaintext
Solde total initial : 400000€
...
Transaction : Alivia -> Kaiden : 14€
Transaction : Arianna -> Barrett : 3€
Transaction : Rosalie -> Connor : 1€
Transaction : Sara -> Arthur : 190€
Transaction : Jude -> Sadie : 41€
...
Solde total final : 400000€
Tout est terminé sans incohérences !
```
---
## 🚀 Points Forts de cette Version
1. **Sécurité des Données :**
Les mécanismes de verrouillage évitent toute corruption des données.
2. **Efficacité :**
L'utilisation de threads optimise les performances par rapport à une version basée sur des processus.
3. **Simplicité :**
Les threads partagent directement les ressources, éliminant le besoin de communication inter-processus.