Project 1 for CSCE4600
Go to file
2022-04-06 01:00:07 -05:00
inc Code cleanup and commentary 2022-04-05 23:53:57 -05:00
src Code cleanup and commentary 2022-04-05 23:53:57 -05:00
.gitignore Update Makefile to produce dependencies & objects 2022-04-05 17:56:11 -05:00
LICENSE Start the project 2022-04-03 11:39:40 -05:00
Makefile Code cleanup and commentary 2022-04-05 23:53:57 -05:00
README.md Update README.md 2022-04-06 00:20:36 -05:00
totally-pseudocode.txt Include shared variables and semaphores in pseudocode. 2022-04-06 01:00:07 -05:00

4600-project-1

Project 1 for CSCE4600, for Team G4

Build

Build with make

Run with make run

Clean with make clean

Explanation of Solution

Counting Semaphores:

This project uses four counting semaphores:

  • sem_freelist tracks the number of blocks on the freelist.

    • This prevents any thread from trying to read a nonexistent (nullptr) block from the freelist.
  • sem_freelist_minus_1 tracks the number of blocks on the freelist minus 1:

    • This is used to circumvent a deadlock situation where Thread-1 (the producer) will eat the last block on the freelist and put it on list1, where Thread-2 (the transformer) will never be able to consume it, since it's blocked on the empty freelist.
    • Without this, you'd need to check that sem_freelist > 1, and the project specifications only allow the use of P() and V(), A.K.A. wait() and signal().
  • sem_list1 tracks the number of blocks on list1.

    • This prevents any thread from trying to read a nonexistent (nullptr) block from list1.
  • sem_list2 tracks the number of blocks on list2.

    • This prevents any thread from trying to read a nonexistent (nullptr) block from list2.

All counting semaphores were used for thread synchronization.

Binary Semaphores:

This project uses three binary semaphores:

  • sem_freelist guarantees mutual exclusion when accessing the freelist.

    • This prevents memory corruption, as list accesses are thread-unsafe.
  • sem_list1 guarantees mutual exclusion when accessing list1.

    • This prevents memory corruption, as list accesses are thread-unsafe.
  • sem_list2 guarantees mutual exclusion when accessing list2.

    • This prevents memory corruption, as list accesses are thread-unsafe.

All binary semaphores were used for mutual exclusion.