When a thread is blocked at a semaphore (e.g. in semop()), does the thread really become idle (no operations), or will it poll inside the semop() operation waiting for a free resource? I have this multithreaded program that when all threads are blocked at semop(), the CPU usage does not go below 7% even when all threads are at idle state. I'd appreciate any help 'coz I can't figure this out.