Anhalten kannst du im Regelfall, indem du auf etwas wartest.
Ein spannendes Synchronisationsmittel für dein Problem ist die
Condition-Variable, insbesondere wenn du deine geteilten Daten/Aufgaben mit einer CriticalSection schützt.
Ansonsten sehen die
auto-reset Events doch auch ganz passend aus.
Eine Liste der verfügbaren Threads zu verwalten wäre in der Tat nicht schlecht