Skip to content

This is a simple filesystem esque application that was used to practice and assess multithreading from a low level in Java, Making use of locks, semaphores, mulitple threads. This example aims to demonstrate the use of FIFO along with semaphores to ensure fairness amongst the competeing threads.

Notifications You must be signed in to change notification settings

TobyPinfold/Concurrency_Assignment_Java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation


This is a simple filesystem esque application that was used to practice and assess multithreading from a low level in Java, Making use of locks, semaphores, mulitple threads. This example aims to demonstrate the use of FIFO along with semaphores to ensure fairness amongst the competeing threads.

*         ,-----.                                                                                 *
*        '  .--./ ,---. ,--,--,  ,---.,--.,--.,--.--.,--.--. ,---. ,--,--,  ,---.,--. ,--.        *
*        |  |    | .-. ||      \| .--'|  ||  ||  .--'|  .--'| .-. :|      \| .--' \  '  /         *
*        '  '--'\' '-' '|  ||  |\ `--.'  ''  '|  |   |  |   \   --.|  ||  |\ `--.  \   '          *
*         `-----' `---' `--''--' `---' `----' `--'   `--'    `----'`--''--' `---'.-'  /           *
*                                  Shared FileSystem Explanation                 `---'            *
*                                                                                                 *
**-----------------------------------------------------------------------------------------------**
*
*  My implementation for the filesystem is using a single semaphore to all process', the
*  semaphore is initialised with a permit count of maximum integer to allow for a maximum
*  amount of reader processes to run without blocking one another. The Read action only requires
*  a single permit to execute and so many read can happen at any given time. A Write action
*  however requires all permits inorder to proceed. Therefore a write cannot attain the semaphore
*  until all permits are free, and if it does indeed get all permits, then a read action cannot
*  acquire a permit to process either. This assures mutual exclusion between the two actions being
*  performed and prevents race conditions between the two.
*
*  Fairness is enabled when I initialise the Semaphore as it uses FIFO on its queue of threads
*  trying to acquire permits. This ensures that all threads get access to the Semaphore which
*  prevents any thread being being blocked indefinitely by other processes causing the process to
*  become starved.
*
*  With regards to write operations, the semaphore using FIFO ensures write can acquire available
*  permits in queue and will have a chance to run. The necessity to acquire all permits then also
*  ensures mutual exclusion in that no read operations can perform until write has released its
*  permits (given it acquires all available permits) and Write cannot perform until it has
*  acquired all permits, meaning all read actions must have finished before it can acquire
*
**-----------------------------------------------------------------------------------------------**/

About

This is a simple filesystem esque application that was used to practice and assess multithreading from a low level in Java, Making use of locks, semaphores, mulitple threads. This example aims to demonstrate the use of FIFO along with semaphores to ensure fairness amongst the competeing threads.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages