# CS3502 Project 1: Asynchronous Banking Account Management

This directory contains multiple toy models of asynchronous bank account systems, demonstrating the principles of race condition and deadlock avoidance.

## Usage

There are 4 programs labeled Phases 1-4:

- **Phase 1**: Naive non-supervised multi-threaded account system
- **Phase 2**: Mutex-based account system
- **Phase 3**: Deadlock generation
- **Phase 4**: Deadlock resolution via lock ordering

If you have [Nix](https://nixos.org/) installed:

```sh
nix run .#p1-phase1
```

Otherwise, the code must be compiled manually:

``` sh
gcc phase1/phase1.c -o phase1.bin
```

