Um processo / thread é acordado inserindo-o na fila de processos / threads a serem agendados. Se você olhar para a fonte de signal
, há uma lista de threads do espaço do usuário que está aguardando a variável condicional, e um desses é ativado com uma chamada de sistema futex
. Verificar um array de variáveis de condição a cada tick seria muito lento ...
So when they describe the thread being blocked, it doesn't mean it is being put in a blocked queue, like threads waiting on I/O?
Threads são implementados como uma mistura de espaço de usuário e espaço do kernel. Assim como um thread / processo aguardando E / S é colocado em uma lista de espaço de kernel para ser reprogramada quando essa operação de E / S específica é concluída, um encadeamento aguardando uma variável de condição é colocado em uma lista de espaço de usuário dessa variável de condição . Então a resposta para sua pergunta é "sim e não". :-)
E a implementação do segmento atual foi otimizada ao longo dos anos, por isso, não fique preso quando a implementação não corresponder aos princípios (mais simples).