An implementation of algorithm of token transport in unreliable token-ring topology.
Implementation in C# & F# in .NET 6 using async Tasks.
Works on Windows & Linux (tested on Windows 10 & Fedora 35).
- Go to folder where file .csproj exists.
- Open cmd/terminal.
- Type:
dotnet run
- Go to folder where file .fsproj exists.
- Open cmd/terminal.
- Type:
dotnet run
- Initial conditions:
- synchronous workflow
- NO FIFO in communication (token value increase infinitely)
- all messages are sent in one direction
- communication channels can be unreliable but in finite time.
- Only one process/thread which have token can do things (critical section).
- Process (1) send token to next process. (e.g. 1 -> 2)
- Process (2) get token, sends ack with token number.
- Process (2) do things in its critical section and then sends token again (with bigger sequencial value e.g. +1).
- If process (1) didn't received ack for sent token in specified time (timeout), resend it.
- Process (1) will resending token until:
- get ack OR
- get newer token than it has.
Project was created for High Reliability Systems Lab course held by Institute of Computing Science, Poznań University of Technology.