In this project, which was created for my CS-453, Operating Systems class, I was given access to a doubly-linked list library and tasked with making that library threadsafe without having access to the source code. This meant that instead of examining the critical sections of the code (which was impossible) I had to go with the worst case scenario and assume that all of the functions in the given library accessed critical data all of the time, and make my wrapper threadsafe accordingly.
I then went on to create a monitor for simulating a size-bounded queue (implemented as a doubly-linked list with a limit on maximum size) being shared by multiple producers and consumers running simultaneously and sharing the same doubly-linked list between them which I had previously made threadsafe. This was done to test that the wrapper I made around the provided library was indeed threadsafe.
To learn how to compile and run this program see the README.md file at one of the version control repository websites listed below.