Freecell Solver distinguishes between two levels of tasks:
1. Soft Thread - a soft thread is one dedicated scan running on the state collection.
2. Hard Thread - a task that should be performed by one system thread with all the dedicated resources that should prevent collisions with other hard threads as much as possible.
A hard thread switches between several soft threads.
At the moment, hard threads can not be multi-threaded using the system threads, as no locking mechanisms are in place. But the distinction still exists in the code.