В случае ManualResetEvent, нет. На самом деле поток не зацикливается или что-то еще. Он просто получил ссылку на себя, вставленную в список уведомлений ManualResetEvent. Когда ДРУГОЙ поток вызывает .Set для ManualResetEvent, этот другой поток заканчивает тем, что помещает ожидающий поток обратно в активную очередь.
Потребляемые ресурсы - это просто учет существования потока: стека, независимо от того, какие ресурсы ядра записаны, сохраненные регистры и т. Д. Теперь, если поток, о котором вы говорили, не использовал ManualResetEvent, а вместо какой-то цикл ожидания, тогда обязательно.
Теперь WaitHandle не является реализацией. Это просто абстрактный API. Нельзя сказать, как могут работать другие реализации WaitHandle.