Synergistic Timing Speculation for Multi-Threaded Programs