Comments on project 1

Overall, the projects were well done. Everybody wrote an essentially correct queue implementation and semaphore implementation. The real differences turned out to be in how the minithreads operations were implemented: the best grades went to groups which dealt with the NT kernel thread effectively, reused code (e.g. minithread_fork can call minithread_create), and had a clear and efficient mechanism for cleaning up threads. The best thread-cleanup schemes involved a "cleanup" thread waiting on a semaphore and being signalled by terminating threads, or a check for threads on the cleanup queue whenever a thread came out of a minithread_yield(). Terminating the application once once all the application-created minithreads have terminated also earned a bonus to the grade.

Common problems included:

If you have any questions, please ask. Specific questions about implementation are okay. Fixing problems with your project 1 implementation will make project 2 much easier!

Ben Atkin