Counts all vowels in specified text files using multithreading. Mutual exclusion is used to lock processing to avoid conflicts.
The sleeping barber problem is a classic interprocessing problem that uses mutual exlusion and semaphores to synchronize a barber and his or her customers such that each customer has his or her hair cut in order.