Это в значительной степени зависит от вашей среды (ОС, библиотека, язык ...) и от того, как реализованы примитивы синхронизации.Поскольку вы ничего не указали, я просто дам общий ответ.
При переводе потока в спящий режим большая часть среды выберет его удаление из очереди готовности планировщика, а поток откажется от оставшегося ЦП.время.При пробуждении поток просто помещается обратно в готовую очередь и возобновляет выполнение в следующий раз, когда планировщик выберет его из очереди.
Возможно также, что поток вместо этого выполнит некоторое активное ожидание (вращение)быть удаленным из готовой очереди планировщика.В этом случае поток возобновит выполнение сразу же.Обратите внимание, что, поскольку поток все еще может быть исчерпан из ЦП во время вращения, ему, возможно, придется подождать, чтобы быть перепланированным, прежде чем проснуться.Это полезная стратегия, если ваши критические разделы очень малы, и вы не хотите платить за планирование.
Гибридный подход заключается в том, чтобы сделать небольшое количество активного ожидания перед удалением потока из очереди готовности планировщика.
Что касается потока сигнализации, если это явно не указано в вашей среде (я могуне по каким-либо причинам, но вы никогда не знаете), я не ожидал бы, что вызов signal () будет блокироваться таким образом, что вам придется его разбудить.Возможно, Signal () придется синхронизировать с другими потоками, вызывающими signal (), но это детали реализации, и вам не нужно ничего с этим делать.