What change history tells us about thread synchronization