Compare @synchronized, NSLock, NSRecursiveLock, and dispatch_semaphore