A multithreaded client which requests files from the GetFileServer using POSIX threads, sockets, and synchronization mechanisms