A lightweight profiler to detect and categorize root causes of synchronization related performance issues in multithreaded programs