Ce programme simule des transactions bancaires concurrentes sans mécanismes de protection. Les processus effectuent des transferts entre comptes bancaires stockés dans un fichier de base de données. Cependant, en l'absence de verrouillage, des incohérences peuvent survenir lorsque plusieurs processus accèdent simultanément au fichier.
Aucune protection n'est mise en place pour gérer les accès concurrents au fichier. Cela peut entraîner des écritures corrompues ou des pertes de données.
En raison de l'absence de verrouillage, plusieurs problèmes peuvent survenir, en particulier dans des situations d'accès concurrent à la base de données :
### **1. Incohérences des Données :**
Sans mécanismes de synchronisation, deux processus peuvent tenter de lire, modifier et réécrire les données d'un même compte simultanément. Cela entraîne des écritures corrompues, où le solde d'un compte peut être incorrect. Par exemple, deux processus peuvent lire un solde identique, effectuer une transaction basée sur ce solde, puis écrire deux fois ce même solde mis à jour, écrasant ainsi les modifications apportées par l'autre processus.
**Exemple d'incohérence :**
- Le **processus 1** lit le solde de `Alice` (1000€).
- Le **processus 2** lit également le solde de `Alice (1000€).
- Le **processus 1** transfère 100€ de `Alice` à `Bob`, et écrit 900€ dans le fichier.
- Le **processus 2** effectue une transaction de 200€ de `Alice` à `Charlie`, et écrit 800€ dans le fichier, perdant la modification effectuée par le **processus 1**.
Après l'exécution des transactions, le solde total des comptes peut ne pas correspondre au solde initial en raison des conflits d'écriture. Par exemple, une transaction pourrait ne pas être correctement appliquée à cause de la lecture et de l'écriture concurrentes sur les mêmes données.
**Exemple de sortie :**
```plaintext
Solde total initial : 10000€
Transaction : Alice -> Bob : 50€
Transaction : Bob -> Alice : 30€
...
Solde total final : 9990€
Le solde final est différent du solde initial...
```
### **3. Absence de Contrôle des Transactions :**
Sans un mécanisme de verrouillage, il est impossible de garantir qu'une transaction soit complète avant qu'une autre ne soit lancée. Par exemple, un transfert de 100€ entre `Alice` et `Bob` peut être partiellement effectué si le programme est interrompu au moment de l'écriture.