TODO for C++ Synchronization Wrappers 1. Standardize error behavior. RATIONALE: Currently, the behavior when a resource cannot be found or when the user incorrectly uses a particular class is implementation-specific. This can cause portability issues. Standardize the way in which each of the primitives behaves when particular errors occur. 2. Allow thread routines to take a parameter. RATIONALE: Requiring all thread functions to take no arguments limits their utility. Most thread packages allow for at least one parameter to be passed in; this should be exposed in a portable manner. 3. COMPLETE: Package thread classes into their own namespace. RATIONALE: Putting everything into the global namespace is frowned upon. Packaging the thread classes avoids naming collsions and makes them more useful.