Ca dépend de l'OS. Et pour un OS donné, ça dépend de la politique choisie pour le dispatcher. Mais sur la pluspart des OS, par défaut, le thread sera undispatché à un moment donné si d'autres threads ont besoin du CPU, même si ton thread ne "rend pas la main".
En général tu peux, au niveau du thread, choisir la façon dont le kernel dispatchera ton thread. Donc si tu as les droits suffisant, tu peux programmatiquement choisir un mode et une priorité qui feront qu'effectivement, le kernel ne te retirera pas le CPU tant que ton thread ne sera pas suspendu (attente d'IO par exemple) et tant que tu ne relache pas le CPU manuellement (yield).