Monitoring is performed to detect a hang condition. A timer is set to
detect a hang based on a core hang limit. If a thread hangs for the
duration of the core hang limit, then a core hang is detected. If the
thread is performing an external memory transaction, then the timer is
increased to a longer memory hang limit. If the thread is waiting for a
shared resource, then the timer may be increased to the longer memory
hang limit if another thread or, more particularly, the thread blocking
the resource has a pending memory transaction. Responsive to detecting a
hang condition, instructions dispatched to the plurality of execution
units may be flushed, or the processor may be reset and restored to a
previously known good, checkpointed architected state.