Switched to dispatch_semaphore pattern which surprisingly performs better.